我找不到确切的答案:以下代码是否具有未定义的行为?

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/

10-11 19:28