sizeof(bool)是否在C ++语言标准中定义?

时间:2011-02-04 12:15:30

标签: c++ boolean sizeof implementation-defined-behavior

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

4 个答案:

答案 0 :(得分:148)

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.

答案 1 :(得分:13)

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。“

答案 2 :(得分:10)

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

答案 3 :(得分:3)

见5.3.3第1段:

  

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