在Array C++中每个bool 1位

Joh*_*nny 5 c++ arrays boolean sizeof

bool fp[81];
Run Code Online (Sandbox Code Playgroud)

根据我的理解,fp应该使用ceil(81/8)字节,因为它是连续的.

我对么?

我该如何证明这一点?

Chu*_*dad 12

不,缓冲区的大小是实现定义的.请参阅以下标准中的引用.

因此,您可以期望的大小是81*X,其中X是bool的大小,这是实现定义的.

$ 5.3.3/1 - "sizeof运算符产生其操作数的对象表示中的字节数.操作数是表达式,未计算,或带括号的type-id.sizeof运算符不应用于具有函数或不完整类型的表达式,或者在声明所有枚举数之前的枚举类型,或者此类型的带括号的名称,或指定位字段的左值.表达式sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1;应用于任何其他基本类型(3.9.1)的sizeof的结果是实现定义的.[ 注意:特别是,sizeof(bool)和sizeof(wchar_t)是实现定义的.69) ] [注意:对于字节的定义见1.7,对象表示的定义见3.9.

  • 这是正确的,但是错过了一个关键点,即`sizeof(bool)`**必须大于或等于`sizeof(char)`,因为`sizeof(char)`是1**的定义**.[是的,这意味着在一个可位寻址的机器上进行一致的C实现是非常困难的.]因此,无论缓冲区的大小如何,它必须至少为*81; 它不能是ceil(81/8). (5认同)

Any*_*orn 6

不,它81*sizeof(bool)最有可能是81个字节