可能重复:
未定义的行为和序列点
在机器代码级别的 C++ 中,postincrement++ 运算符何时执行?
优先级表表明 postfix++ 运算符是第 2 级:这意味着在
int x = 0 ;
int y = x++ + x++ ; // ans: y=0
后缀 ++ 的先执行。
但是,这行的逻辑操作似乎是先发生加法(0+0),但这是怎么发生的呢?
我想象的如下:
// Option 1:
// Perform x++ 2 times.
// Each time you do x++, you change the value of x..
// but you "return" the old value of x there?
int y = 0 + x++ ; // x becomes 1, 0 is "returned" from x++
// do it for the second one..
int y = 0 + 0 ; // x becomes 2, 0 is "returned" from x++... but how?
// if this is really what happens, the x was already 1 right now.
因此,另一种选择是尽管 x++ 在 x + x 的优先级表上更高,但由于 x++ 生成的代码被插入到加法运算的下方
// Option 2: turn this into
int y = x + x ; //
x++ ;
x++ ;
第二个选项似乎更有意义,但我对这里的操作顺序感兴趣。具体来说,x 什么时候改变?