为什么输出在C ++和Java中的表达式m ++ +(++ m)不同

时间:2011-10-17 06:38:45

标签: java c expression

考虑:

int m = 2, n;

n = m++ + (++m);

在C输出中是:

m = 4, n = 4;

在Java输出中是:

m = 4, n = 5;

这是怎么发生的?

2 个答案:

答案 0 :(得分:9)

它可能不同,因为C不允许正确的程序包含这样的表达式 - C不定义此类程序的行为。这为C编译器提供了解释这些表达式的广泛范围。

Java通过定义像这样的表达式的预期行为来更紧密地约束实现。

(在C中断的规则是,如果没有插入序列点,表达式可能不会多次修改对象的值。)

答案 1 :(得分:3)

如上所述,你不应该写那样的代码。这是关于序列点等的; - )

请查看本讲座 http://www.slideshare.net/olvemaudal/deep-c

非常有用。