在C++中,使用bool而不是char的意义是什么?

10

sizeof(char)和sizeof(bool)都等于1(在我的编译器/系统/任何东西中,我听说它的值并不总是相同的),bool只能存储true或false,而char可以承载更多的值,并且可以使用按位运算符作为多个bool变量(8个比特,每个比特可以用作1个bool,总共可用8个bool)。

那么,使用bool有什么优势呢?

除了可读性之外还有其他方面吗?我曾经在某个地方读到过,即使占用更多的内存,int的处理速度也比short或byte更快。那么,在速度方面,char和bool之间是否存在差异?


10
是的,bool 只能存储 true 或者 false - juanchopanza
4
可读性:使用布尔类型可传达您只打算存储真或假的意图。而且,使用精确的类型可以提供更好的错误消息和更好的重载分辨率。 - Alan Stokes
1
sizeof(bool) 不一定是 1,实现可能会选择更大的尺寸。 - Yu Hao
如果没有 bool,你会问为什么只有 char 而没有 bool - Maroun
1
你可以在一个char中存储8个bool,如果你的系统允许的话。但是意图是主要原因。 - RedX
显示剩余2条评论
2个回答

17
使用 bool 的主要目的是表达意图。如果变量旨在存储具有真/假语义的值,允许其他值只是潜在错误的来源。

2

bool是"boolean"的缩写,所以每个熟悉boolean algebra的人都可以确定该变量只能存储两个逻辑值之一(truefalse):如果你需要一个只能处于这两种逻辑状态之一的变量,使用可以存储其他任何内容的东西是否有理由呢?

唯一由标准明确定义的大小是sizeof(char),它为1字节,但sizeof(bool)不同。每个值为1位的布尔向量模板boolean vector是什么情况。

[注意编辑]

你对应用程序进行了分析并发现这是一个瓶颈吗?据我所知,除非你需要存储和操作一些布尔变量,否则没有优势,除了使用boolean vectors


有人指出的一个优点是,由于char使用8位内存,可以通过使用按位运算符将其作为八个布尔变量来使用,基本上是为了节省内存空间。 - DarkPotatoKing
@KyleRosales,当然。在许多库中,还有byteworddword的定义。虽然我不是以英语为母语的人,但对我来说,在字符整数上进行移位、掩码或按位比较有点奇怪:D - Netherwire
@KyleRosales 把八个布尔值放在一个 char 变量中并不能节省内存空间。机器指令需要提取和测试每个位,这会使用更多的内存空间。 - ScottMcP-MVP
@KyleRosales:你可以通过大量的工作手动节省空间。如果你声明8个布尔值,编译器可能会自动进行相同的优化,如果它想要的话(这可能是不自动进行编译器优化的原因(即在节省空间方面不值得(或者以速度为代价))。但是编译器只会在始终安全的情况下执行。这是自我优化经常忽视的潜在危险。有一些类型可以帮助std::bitset<8> - Martin York
不,我从来没有写过使用布尔值成为瓶颈的代码,我只是在问一些理论问题。 - DarkPotatoKing
或者只需使用64位无符号整数,您将拥有64个布尔值。 - ScienceDiscoverer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接