Antworten:
sizeof(bool)
ist die Implementierung definiert, und der Standard legt besonderen Wert auf diese Tatsache.
§5.3.3 / 1, gekürzt:
sizeof(char)
,sizeof(signed char)
Undsizeof(unsigned char)
sind 1; Das Ergebnis dersizeof
Anwendung auf einen anderen Grundtyp ist implementierungsdefiniert. [Hinweis: Insbesonderesizeof(bool)
undsizeof(wchar_t)
sind implementierungsdefiniert. 69) ]
Fußnote 69):
sizeof(bool)
muss nicht 1 sein.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"In Visual C ++ 4.2 enthielten die Standard-C ++ - Headerdateien ein typedef, das 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. Dies bedeutet, dass dies für Visual gilt In C ++ 4.2 ergibt ein Aufruf von sizeof (bool) 4, während in Visual C ++ 5.0 und höher derselbe Aufruf 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. "
Die Implementierung ist definiert. Nur sizeof(char)
ist 1
nach dem Standard.
CHAR_BIT
, definiert in gefunden werden climits
.
bool
?