例如,真正的+ 1意味着什么? 如果它没有意义,为什么即使在-Wall模式下我的G ++也不会引发错误?
答案 0 :(得分:3)
来自标准:
根据4.7(积分转换),
4如果是目的地类型 是bool,如果源类型是bool,则值为false 转换为零,值true转换为一个。
在4.12中,
算术,枚举,指针或指向成员的指针的右值 type可以转换为bool类型的右值。零值,null 指针值,或null成员指针值转换为false;任何 其他值转换为true。
因此true + 1
表示1 + 1
而false + 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
类型为x
时bool
等更新表达式,因为+=
已定义 { {1}}和=
。
但是,不推荐在+
上使用后缀或前缀++
。使用前缀bool
的后缀无效。引用 1 神圣标准,“操作数不应为--
类型。”
<小时/> 1 )[expr.pre.incr]中的C ++11§5.3.2/ 2和[expr.post.incr]中的§5.2.6/ 2。