web-dev-qa-db-de.com

Ist sizeof (bool) im C ++ - Sprachstandard definiert?

Ich kann in der Standarddokumentation keine Antwort finden. Erfordert der C++ - Sprachstandard, dass sizeof(bool) immer 1 (für 1 Byte) ist, oder ist diese Größe durch die Implementierung definiert?

103
0xbadf00d

sizeof(bool) ist eine Implementierungsdefinition, und der Standard legt besonderen Wert auf diese Tatsache.

§5.3.3/1, gekürzt:

sizeof(char), sizeof(signed char) und sizeof(unsigned char) sind 1; Das Ergebnis von sizeof, das auf einen anderen Fundamentaltyp angewendet wird, ist implementierungsdefiniert. [Anmerkung: Insbesondere sind sizeof(bool) und sizeof(wchar_t) implementierungsdefiniert.69)]

Fußnote 69):

sizeof(bool) muss nicht 1 sein.

151
GManNickG

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

"In Visual C++ 4.2 enthielten die Standard-C++ - Headerdateien eine typedef, die bool mit int gleichsetzte. In Visual C++ 5.0 und höher ist bool als integrierter Typ mit einer Größe von 1 Byte implementiert. Das bedeutet, dass für Visual In C++ 4.2 ergibt ein Aufruf von sizeof (bool) den Wert 4, während in Visual C++ 5.0 und höher derselbe Aufruf den Wert 1 ergibt. Dies kann zu Speicherbeschädigungsproblemen führen, wenn Sie in Visual C++ 4.2 Strukturelemente vom Typ bool definiert haben und Objekte mischen Dateien (OBJ) und/oder DLLs, die mit den Compilern 4.2 und 5.0 oder höher erstellt wurden. "

13
Yi Ling

Die Implementierung ist definiert. Nur sizeof(char) ist 1 von der Norm.

10
peoro

Siehe 5.3.3 Absatz 1:

[Anmerkung: insbesondere sizeof (bool) und sizeof (wchar_t) sind implementierungsdefiniert.69)]

3
BЈовић