【发布时间】:2013-11-04 09:32:42
【问题描述】:
The C++11 standard (5.17, expr.ass) 声明
在所有情况下,赋值都是在值计算之后排序的 左右操作数,在计算值之前 赋值表达式。关于一个 不确定顺序的函数调用,复合的操作 分配是一个单一的评估
据我了解,作为给定赋值一部分的所有表达式都将在赋值本身之前进行评估。即使我在同一个赋值中修改同一个变量两次,这条规则也应该起作用,我相当肯定,以前是未定义的行为。
请问给定的代码:
int a = 0;
a = (a+=1) = 10;
if ( a == 10 ) {
printf("this is defined");
} else {
printf("undefined");
}
总是评估为a==10?
【问题讨论】:
-
旁注:检查可能未定义的表达式的结果并不能告诉我们它是否实际上是 UB。它可以是 UB 并产生正确的结果。
-
@jrok 这是一个示例代码,甚至可能是一个 SSCCE,因为 SO 要求我包含有效代码。出于好奇,我确实尝试过测试它,但我意识到它证明不了任何事情;因此我什至没有提到它。
-
@jrok - 它可以产生“正确”的结果。引号很重要。
<g>
标签: c++ c++11 variable-assignment operator-precedence expression-evaluation