C,C ++和Java中的结果不同。为什么?

时间:2011-09-16 00:08:57

标签: java c++ c

  

可能重复:
  Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

int i = 10;
int n = i++*5*i;

输出

n = 550的值(用Java表示) 值n = 500(在C和C ++中)

为什么不一样?为什么不同?

3 个答案:

答案 0 :(得分:5)

在Java中,这是一个定义明确的操作。它会:

  1. 增量i(现在是11);
  2. 生成i(10)的旧值,因为您使用了postfix increment operator;
  3. 乘以5(10 * 5 = 50);
  4. 乘以i的当前值(50 * 11 = 550);
  5. 在C和C ++ this operation has undefined behaviour中,任何事情都可能发生。如果发生任何事情,那就解释了结果,无论它们是什么,以及它们是否对你有意义。

答案 1 :(得分:2)

在C和C ++中,操作如:

j = i++ + i;
由于缺少序列点,

未定义。在Java中,它们定义得很好。因此,您可以看到结果的差异。

答案 2 :(得分:0)

因为你正在做的事情是未定义的。增量运算符不应放在赋值表达式中,变量递增。

i = i++; //undefined
n = i++ + i; // also undefined