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

0xb*_*00d 107 c++ boolean sizeof implementation-defined-behavior

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

GMa*_*ckG 158

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.

  • 请注意,std :: vector <bool>被优化为标准含有1位bool的向量. (5认同)
  • @eagle你可以随时使用`char` ... (4认同)
  • @Eagle:这取决于你的编译器,我不确定.最好将它留给编译器. (3认同)

Yi *_*ing 14

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."

  • @ChristopherCreutzig这是反例的证明. (12认同)
  • @kinokijuf这不是一个反例.Visual C++中有很多东西不符合标准. (10认同)
  • 你确实意识到这与问题有些关系,但显然不是答案,因为0xbadf00d询问了标准,而不是某些特定/任意选择的编译器实现,对吧? (2认同)

peo*_*oro 10

它的实现已定义.仅sizeof(char)1由标准.

  • 1个字节.每个字节的位数不是由标准定义的(它必须至少为8 IIRC),但可以在`climb_B`中定义的`CHAR_BIT`中找到. (9认同)
  • 请注意,标准中的1可以表示4个字节.比每种类型都是4的产品.所以注意标准ONLY定义char是1,但不定义测量. (2认同)