重複の可能性:
未定義の動作とシーケンスポイント
マシンコードレベルの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++ ;
この2番目のオプションの方が理にかなっているようですが、ここでの操作の順序に興味があります。具体的には、xはいつ変化しますか?