C/ c++中的bool值求和

Summing bool values in C/C++

本文关键字:求和 bool 中的 c++      更新时间:2023-10-16

考虑下面的c++代码:

bool a = 5;
bool b = 6;
int c = (int)a + (int)b;

当我编译运行这段代码时,c的值是2。标准是否保证,在任何编译器/平台中,初始化为false(0)或true(不一定是1)的bool值将在操作中为1,并且上面的代码将始终导致c为2?

在C99中,包括stdbook .h,这仍然有效吗?

c++标准第4.7节(整数版本)规定:

如果源类型为bool,则将值false转换为0,值true被转换为1。

第4.9节对浮点数转换做了相同的保证。

对于编译器来说,规则通常是false为0,其他都为真。然而,像对待整数类型一样对待bool通常被认为是不好的形式。然而,标准包括一个转换为int的规则,只要编译器遵守标准,你的假设是正确的false = 0和true = 1 !

在任何情况下,为什么算术与bool类型?

希望对您有所帮助

按标准:

  • true转换为1
  • false转换为0

转换为int是不需要的,因为转换为int是隐式的。

David Schwartz已经回答了c++的问题。对于C99标准,我们有6.3.1.4:

当将任何标量值转换为_Bool时,如果值比较等于0;否则,结果为1。

由于标准6.3.1.1也明确了_Bool受整数提升的影响,因此显然_Bool将始终为0或1。