可能重复:
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 ++中)
为什么不一样?为什么不同?
答案 0 :(得分:5)
在Java中,这是一个定义明确的操作。它会:
i
(现在是11); i
(10)的旧值,因为您使用了postfix increment operator; i
的当前值(50 * 11 = 550); 在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