我找不到确切的答案:以下代码是否具有未定义的行为?
int x = 2;
x+=x+=x+=2.5;
最佳答案
该行为是未定义的。让我们看一下更简单的表达式:
x += (x+=1)
在C++ 11中,相对于表达式
x
的值计算,左(x+=1)
的值计算没有顺序。这意味着x
的值计算相对于x
的分配是未排序的(由于x+=1
),因此行为是不确定的。这样做的原因是
+=
运算符两侧的值计算相对于彼此未排序(因为标准没有另外指定)。 1.9p15指出:在C++ 03中,行为是不确定的,因为
x
被修改了两次,而中间没有插入顺序点。关于c++ - 单个语句: is it Undefined Behavior or not?中的多个复合赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17166912/