sizeof(bool)是否定义?

我无法在标准文档中find答案。 sizeof(bool)总是1个字节,还是实现定义?

是的,这是实施定义的,标准着重强调明确。

§5.3.3/ 1,删节:

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

脚注69):

sizeof(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字节的内置types,这意味着对于Visual在Visual C ++ 5.0和更高版本中调用sizeof(bool)的函数时,C ++ 4.2会调用yield 4,如果在Visual C ++ 4.2中定义了booltypes的结构成员,并且正在混合对象,则会导致内存损坏问题文件(OBJ)和/或使用4.2和5.0或更高版本的编译器构build的DLL。

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

见5.3.3段落1:

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