Apakah sizeof (bool) ditentukan dalam standar bahasa C ++?


Jawaban:


167

sizeof(bool) adalah implementasi yang ditentukan, dan standar menekankan pada fakta ini.

§5.3.3 / 1, diringkas:

sizeof(char), sizeof(signed char)dan sizeof(unsigned char)1; hasil dari sizeofpenerapan pada tipe fundamental lainnya ditentukan oleh implementasi. [Catatan: secara khusus, sizeof(bool)dan sizeof(wchar_t)ditentukan oleh implementasi. 69) ]

Catatan kaki 69):

sizeof(bool) tidak harus 1.


adakah sebuah flag yang saya perlukan untuk mengkompilasi program saya, bahwa kompiler saya hanya akan menggunakan 1 byte bool?
Elang

3
@Eagle: Terserah kompiler Anda, saya tidak yakin. Mungkin lebih baik Anda menyerahkannya pada kompiler Anda.
GManNickG

5
perhatikan bahwa std :: vector <bool> dioptimalkan ke vektor yang berisi bit 1bit menurut standar.
pengguna3063349

15

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

Pada Visual C ++ 4.2 file header Standard C ++ berisi typedef yang disamakan bool dengan int. Pada Visual C ++ 5.0 dan yang lebih baru, bool diimplementasikan sebagai built-in type dengan ukuran 1 byte. Itu artinya untuk Visual C ++ 4.2, panggilan sizeof (bool) menghasilkan 4, sedangkan dalam Visual C ++ 5.0 dan yang lebih baru, panggilan yang sama menghasilkan 1. Hal ini dapat menyebabkan masalah kerusakan memori jika Anda telah menetapkan anggota struktur tipe bool dalam Visual C ++ 4.2 dan objek pencampuran file (OBJ) dan / atau DLL yang dibuat dengan kompiler 4.2 dan 5.0 atau yang lebih baru. "


2
Anda menyadari bahwa ini agak terkait dengan pertanyaan, tetapi jelas bukan jawaban, karena 0xbadf00d bertanya tentang standar, bukan implementasi compiler yang dipilih secara spesifik / sewenang-wenang, bukan?
Christopher Creutzig

13
@ChristopherCreutzig Ini adalah bukti oleh counterexample.
kinokijuf

12
@kinokijuf Ini bukan counterexample. Ada banyak hal dalam Visual C ++ yang tidak memenuhi standar.
0xbadf00d

11

Implementasinya ditentukan. Hanya sizeof(char)adalah 1oleh standar.


2
harap dicatat bahwa 1 dalam standar dapat berarti 4 byte. Dari setiap jenis adalah produk 4. Jadi perhatian bahwa standar HANYA mendefinisikan karakter adalah 1, tetapi tidak mendefinisikan ukuran.
pengguna3063349

1 berarti 8 bit atau 1 byte dalam standar
paulm

11
1 byte. Jumlah bit per byte tidak ditentukan oleh standar (minimal harus 8 IIRC), tetapi dapat ditemukan di CHAR_BIT, didefinisikan di climits.
peoro

3

Lihat 5.3.3 paragraf 1:

[Catatan: khususnya, sizeof (bool) dan sizeof (wchar_t) ditentukan oleh implementasi.69)]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.