在C ++中,我想知道为什么布尔类型是8位长(在我的系统上),其中只有一位足以容纳布尔值?
我曾经认为这是出于性能方面的考虑,但是在32位或64位机器上(寄存器为32或64位宽),性能优势是什么?
还是仅仅是这些“历史性”原因之一?
sizeof(bool)
应该是4。我可以保证msvc具有32位布尔值,但是我只是尝试了而没有。
vector<bool>
不在于它试图变得聪明并且将bool打包成小块,而是试图做到这一点并伪装成STL容器。一个普通的位集就可以了,只要它也不会假装成STL容器即可。
bool
数据类型与BOOL
类型定义为的Windows 类型混淆long
。因此sizeof(bool) != sizeof(BOOL)
,我确定会引起很多混乱(并且可能还有很多错误)。特别是因为Windows 中也有boolean
和BOOLEAN
typedef,它们是的别名unsigned char
。另外,请注意,虽然通常为bool
1个字节,但C ++标准有一个注释,专门指出sizeof(bool)
可以更大。