考虑:
if (a=5) {
/* do something */
}
任务作为条件如何发挥作用?
它是基于左值的非零值吗?
C++ — ISO/IEC 14882:2003(E)
[5.17/1]
有几个赋值运算符,它们都组
右到左。全部都需要一个可修改的左值作为其左操作数,
赋值表达式的类型是其左操作数的类型。赋值运算的结果就是左边存储的值
赋值后的操作数;结果是一个左值。
表达式的结果a = 5
is 5
.
[6.4/4]
[..] a 的值状况这是一个表达式,其值是
表达,隐式转换为bool
对于除以下以外的陈述switch
. [..]
转换为bool
发生。
[4.12/1]
算术、枚举、指针或指向成员的指针的右值
type 可以转换为 type 的右值bool
。零值,null
指针值,或空成员指针值转换为false
; 任何
其他值转换为true
.
5
转换为布尔值true
.
[6.4.1/1]
如果条件 (6.4) 为真,则第一个
子语句被执行。 [..]
true
被视为if
声明成功。
C — ISO/IEC 9899:1999(E)
[6.5.16/3]
赋值运算符将值存储在对象中
由左操作数指定。赋值表达式的值为
赋值后的左操作数,但不是左值。 [..]
表达式的结果a = 5
is 5
.
[6.8.4.1/2]
在这两种形式中,如果满足以下条件,则执行第一个子语句
表达式比较不等于0. [..]
5
被视为if
声明成功。
General
像这样的代码几乎总是一个错误;作者可能有意if (a == 5) {}
。然而,有时它是故意的。你可能会看到这样的代码:
if (x = foo()) {
cout << "I set x to the result of foo(), which is truthy";
// ... stuff
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)