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

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

101946 次浏览

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

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。

见5.3.3第1段:

[注: 特别是 sizeof (bool)和 Sizeof (wchar _ t)是 69)]

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

”在 Visual C + + 4.2中,Standard 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,这会导致内存损坏问题。”