【发布时间】:2011-06-21 08:03:32
【问题描述】:
我在标准文档中找不到答案。 C++ 语言标准是否要求 sizeof(bool) 始终为 1(对于 1 个字节),还是这个大小是实现定义的?
【问题讨论】:
标签: c++ boolean sizeof implementation-defined-behavior
我在标准文档中找不到答案。 C++ 语言标准是否要求 sizeof(bool) 始终为 1(对于 1 个字节),还是这个大小是实现定义的?
【问题讨论】:
标签: c++ boolean sizeof implementation-defined-behavior
sizeof(bool) 是实现定义的,标准特别强调了这一事实。
§5.3.3/1,删节:
sizeof(char)、sizeof(signed char)和sizeof(unsigned char)为 1;sizeof应用于任何其他基本类型的结果是实现定义的。 [注意:特别是sizeof(bool)和sizeof(wchar_t)是实现定义的。69)]
脚注 69):
sizeof(bool)不需要为 1。
【讨论】:
bool 使用 1 个字节?
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
“在 Visual C++4.2 中,标准 C++ 头文件包含一个 typedef,将 bool 等同于 int。在 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。"
【讨论】:
它是实现定义的。只有sizeof(char) 是标准的1。
【讨论】:
CHAR_BIT 中找到,在climits 中定义。
参见 5.3.3 第 1 段:
[注意:特别是 sizeof(bool) 和 sizeof(wchar_t) 是 实现定义.69) ]
【讨论】: