C ++:为什么bool算法有意义?

时间:2015-02-11 05:11:08

标签: c++

例如,真正的+ 1意味着什么? 如果它没有意义,为什么即使在-Wall模式下我的G ++也不会引发错误?

4 个答案:

答案 0 :(得分:3)

来自标准:

根据4.7(积分转换),

  

4如果是目的地类型   是bool,如果源类型是bool,则值为false   转换为零,值true转换为一个

在4.12中,

  

算术,枚举,指针或指向成员的指针的右值   type可以转换为bool类型的右值。零值,null   指针值,或null成员指针值转换为false;任何   其他值转换为true。

因此true + 1表示1 + 1false + 1表示0 + 1

答案 1 :(得分:2)

true+1是整数算术运算。 true已转换为1,您获得2

答案 2 :(得分:1)

布尔值在C ++中隐式转换为整数

答案 3 :(得分:1)

在声明中

bool x = true + 1;

true首次升级为int;然后加法产生2;最后,根据任何基本类型值true转换为X的规则,2将转换为(X != 0)

上述内容还涵盖x += 1类型为xbool等更新表达式,因为+= 已定义 { {1}}和=

但是,不推荐在+上使用后缀或前缀++。使用前缀bool的后缀无效。引用 1 神圣标准,“操作数不应为--类型。”

<小时/> 1 )[expr.pre.incr]中的C ++11§5.3.2/ 2和[expr.post.incr]中的§5.2.6/ 2。