Is sizeof(bool) defined?

2019-01-01 07:23发布

I can't find an answer in the standard documentation. Is sizeof(bool) always 1-byte, or is it implementation defined?

4条回答
牵手、夕阳
2楼-- · 2019-01-01 07:40

See 5.3.3 paragraph 1 :

[Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.69) ]

查看更多
还给你的自由
3楼-- · 2019-01-01 07:48

It's implementation defined. Only sizeof(char) is 1 by the standard.

查看更多
梦该遗忘
4楼-- · 2019-01-01 07:59

It's implementation defined, and the standard puts notable emphasis on making that clear.

§5.3.3/1, abridged:

sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the result of sizeof applied to any other fundamental type is implementation-defined. [Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.69)]

Footnote 69):

sizeof(bool) is not required to be 1.

查看更多
流年柔荑漫光年
5楼-- · 2019-01-01 08:00

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."

查看更多
登录 后发表回答