130

我在标准文档中找不到答案。C++ 语言标准是否要求sizeof(bool)始终为 1(对于 1 个字节),或者这个大小是实现定义的?

4

4 回答 4

186

sizeof(bool)是实现定义的,该标准特别强调了这一事实。

§5.3.3/1,删节:

sizeof(char),是 1 sizeof(signed char); 应用于任何其他基本类型sizeof(unsigned char)的结果是实现定义的。sizeof[注意:特别是,sizeof(bool)并且sizeof(wchar_t)是实现定义的。69) ]

脚注 69):

sizeof(bool)不需要为 1。

于 2011-02-04T12:16:52.913 回答
20

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

“在 Visual C++4.2 中,标准 C++ 头文件包含将 bool 等同于 int 的 typedef。在 Visual C++ 5.0 及更高版本中,bool 被实现为大小为 1 字节的内置类型。这意味着对于 Visual C++ 4.2,sizeof(bool) 的调用产生 4,而在 Visual C++ 5.0 及更高版本中,相同的调用产生 1。如果您在 Visual C++ 4.2 中定义了 bool 类型的结构成员并且正在混合对象,这可能会导致内存损坏问题使用 4.2 和 5.0 或更高版本的编译器构建的文件 (OBJ) 和/或 DLL。”

于 2011-08-04T01:50:49.123 回答
11

它是实现定义的。只是按标准sizeof(char)1

于 2011-02-04T12:16:49.663 回答
3

见 5.3.3 第 1 段:

[注意:特别是 sizeof(bool) 和 sizeof(wchar_t) 是实现定义的.69)]

于 2011-02-04T12:19:45.527 回答