繰り返しますが、ばかげた質問です。
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i = 0;
i = i++;
cout<<i;
return 0;
}
私は1
0を期待していましたが、このプログラムの結果として出力されます。最初に0に等しいeingで作成された一時オブジェクト、次にiがインクリメントされ、次に一時オブジェクトが返され、iに割り当てられます。ちょうどによると:
5.2.6インクリメントとデクリメント[expr.post.incr]1後置++を適用して得られる値は、演算子を適用する前にオペランドが持っていた値です。[注:取得された値は元の値のコピーです]
MSVC2008とGCCで確認しました。少なくともgccはインクリメント文字列で警告を発行しますが、どちらも同じ結果になります。私はどこが間違っていますか?