重複の可能性:
未定義の動作とシーケンスポイント
私は次のコードを書き、[驚いたことに]それを印刷しました:xx:1 zz:0
xxとzzの両方が0として出力されることを期待していました。これは、Linuxおよびdarwinのgcc 4.2、4.4、および4.7で試行されます。調査の結果、x = x ++は未定義の動作であることがわかりましたが、(x ++)が最初に実行され、0が返されることを期待しています。誰かがこの奇妙なコンパイラの動作に光を当てることができますか?
#include <iostream>
using namespace std;
int frwd(int aa) { return aa; }
int main() {
int xx = 0;
xx = (xx++);
cout << "xx:" << xx << endl;
int zz = 0;
zz = frwd(zz++);
cout << "zz:" << zz << endl;
}