I can't find an answer in the standard documentation. Does the C++ language standard require sizeof(bool)
to always be 1 (for 1 byte), or is this size implementation-defined?
sizeof(bool)
is implementation defined, and the standard puts notable emphasis on this fact.
§5.3.3/1, abridged:
sizeof(char)
,sizeof(signed char)
andsizeof(unsigned char)
are 1; the result ofsizeof
applied to any other fundamental type is implementation-defined. [Note: in particular,sizeof(bool)
andsizeof(wchar_t)
are implementation-defined.69)]
Footnote 69):
sizeof(bool)
is not required to be 1.
bool
? –
Petronille http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the same call yields 1. This can cause memory corruption problems if you have defined structure members of type bool in Visual C++ 4.2 and are mixing object files (OBJ) and/or DLLs built with the 4.2 and 5.0 or later compilers."
It's implementation defined. Only sizeof(char)
is 1
by the standard.
CHAR_BIT
, defined in climits
. –
Tonie sizeof(unsigned char)
and sizeof(signed char)
also have to be 1
by the standard –
Augend See 5.3.3 paragraph 1 :
[Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.69) ]
© 2022 - 2024 — McMap. All rights reserved.
bool
to be 1 byte, you can check it at compile-time:static_assert(sizeof(bool) == 1, "OMG bool is big here");
. – Terrill