Answers:
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。
http://msdn.microsoft.com/zh-CN/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
。
bool
?