按产品分配(乘法赋值)和C ++中的递增或递减?

时间:2014-01-01 22:25:38

标签: c++ operators variable-assignment increment multiplication

为什么我们会在以下两个陈述中得到不同的结果:

int x = 5;
x = x * x++;

输出为26;而下一个例子返回30,虽然它们是相同的?!

int x = 5;
x *= x++;

谢谢

2 个答案:

答案 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然后乘以值也是不明确的。