为什么我们会在以下两个陈述中得到不同的结果:
int x = 5;
x = x * x++;
输出为26;而下一个例子返回30,虽然它们是相同的?!
int x = 5;
x *= x++;
谢谢
答案 0 :(得分:4)
这两者在C ++ 03和C ++ 11中都表现出未定义的行为。在C ++ 11术语中,您不能对同一个标量进行两次未经测序的修改,也不能使用相同的标量进行修改和值计算,否则您将有未定义的行为。
x = x * x++;
在这种情况下,使用x
的另外两个值计算不会增加x
(修改)。
x *= x++;
在这种情况下,左侧x
的值计算未对序列x
进行递增。
有关未定义行为的含义,请参阅C ++11§1.3.24:
未定义的行为
本国际标准没有要求的行为
答案 1 :(得分:0)
将++'d值分配给原始值是未定义的行为。因此,分配一个++'d然后乘以值也是不明确的。