运算符优先级,结果是否正确?

Gen*_*zer 8 c++ java operator-precedence

可能重复:
未定义的行为和序列点

x这段代码后的价值是多少?

int x = 5;
x = ++x + x++;
Run Code Online (Sandbox Code Playgroud)

在Java中,结果是12,但在C++中,结果是13.

我搜索了Java和C++的运算符优先级,它们看起来一样.那么为什么结果不同呢?是因为编译器吗?

Mat*_*hen 21

在Java中,它被定义为评估为12.它评估如下:

x = ++x + x++;
x = 6 + x++; // x is now 6
x = 6 + 6; // x is now 7
x = 12 // x is now 12
Run Code Online (Sandbox Code Playgroud)

+由于评估左手操作数优先,(++ x)的左操作数在右边之前被完全评估.也看到这个以前的答案,而这一次,类似主题,链接到标准.

在C++中,它是未定义的行为,因为你在没有插入序列点的情况下修改x三次.