考虑:
if (a=5) {
/* do something */
}
Run Code Online (Sandbox Code Playgroud)
作业如何作为一个条件?
它是基于l值的非零值吗?
Lig*_*ica 22
[5.17/1]有几个赋值运算符,所有赋值运算符都从右到左分组.所有都需要一个可修改的左值作为左操作数,赋值表达式的类型是其左操作数的类型. 赋值操作的结果是赋值发生后存储在左操作数中的值 ; 结果是一个左值.
表达的结果a = 5是5.
[6.4/4][..] 作为表达式的条件的值是表达式的值,隐式转换bool为除以外的语句switch.[..]
转换bool发生.
[4.12/1]算术,枚举,指针或指向成员类型的指针的右值可以转换为类型的右值bool.将零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.
5转换为布尔值true.
[6.4.1/1]如果条件(6.4)产生真,则执行第一个子语句.[..]
true被视为if陈述成功.
[6.5.16/3]赋值运算符将值存储在左操作数指定的对象中.赋值表达式在赋值后具有左操作数的值,但不是左值.[..]
表达的结果a = 5是5.
[6.8.4.1/2]在两种形式中,如果表达式比较不等于0,则执行第一个子语句.[..]
5被视为if陈述成功.
像这样的代码几乎总是一个错误; 作者可能有意if (a == 5) {}.但是,有时它是故意的.你可能会看到这样的代码:
if (x = foo()) {
cout << "I set x to the result of foo(), which is truthy";
// ... stuff
}
Run Code Online (Sandbox Code Playgroud)