我在评估顺序中没有找到相关术语。
那么下面的代码中函数
g
的行为是否未定义?
int x;
int f() { return x++; }
void g() { x = f(); }
我在不同的平台上使用不同的参数编译了代码,结果表明
x
始终保持不变。
自 C++11 起,该代码已定义行为。在此之前它有未定义的行为。
自 C++17 起的规则是任何赋值的右侧都排序在左侧之前,并且两者都排序在赋值的副作用之前。
自 C++11 以来的规则是赋值的副作用排列在两个操作数之后。
f()
中表达式g
的
值计算和
副作用来自于
f
主体的执行,即x++
。