++ i + ++ i + ++ i in Java vs C.

int i=2; i = ++i + ++i + ++i; 

哪个更正确? Java的结果为12或C = 13.或者如果不是正确性,请详细说明。

没有比这更正确的了。 它实际上是未定义的,它被称为序列点错误。 http://en.wikipedia.org/wiki/Sequence_point

Java保证(第15.7.1节 )它将从左到右进行评估,给出12.具体来说, ++具有更高的优先级+ 。 所以它首先绑定那些,然后它将从左到右的添加操作联系起来

 i = (((++i) + (++i)) + (++i)); 

§15.7.1表示首先评估左操作数, §15.7.2表示在操作之前评估两个操作数。 所以评估如下:

 i = (((++i) + (++i)) + (++i)); i = ((3 + (++i)) + (++i)); // i = 3; i = ((3 + 4) + (++i)); // i = 4; i = (7 + (++i)); // i = 4; i = (7 + 5); // i = 5; i = 12; 

在C中,修改变量两次没有序列点是未定义的行为。

Java结果对我有意义,因为运算符给出了您期望的结果,但没有严肃的程序应该包含这样的语句。

编辑:我很高兴这句话的回答是我晚上得分最高的答案(与我发布的十几个其他答案相比,有些还有代码样本页面)。 这就是人生。

在C中,这是未定义的行为。 没有正确的行为。