将变量添加到自身,其中后缀增量在Java/c#中不同于在C中

Nei*_*ker 1 c java postfix-notation

在Java和C#中如果我这样做:

int i=1;
int j= i++ + i;
Run Code Online (Sandbox Code Playgroud)

j是3,即它转换为1 + 2并在加法之前递增i.

但是,在C j中是2,即它转换为1 + 1然后递增i.

C和Java/C#中的内部机制是什么导致表达式的差异?

(同样适用于后期修复.Java/C#变为4,C变为3.)

谢谢.

顺便说一句,最初我认为这将是C答案,因此被Java/C#结果搞糊涂了.

das*_*ght 5

与Java和C#精确指定何时会发生副作用不同,C禁止在下一个序列点之前使用带副作用的表达式.您的表达式不仅在C中产生不同的结果,而且还是未定义的行为.