私は最近、comp.lang.c++ モデレートで、関数から静的整数の参照を返すコードを見ました。コードはこんな感じでした
int& f()
{
static int x;
x++;
return x;
}
int main()
{
f()+=1; //A
f()=f()+1; //B
std::cout<<f();
}
クールな Visual Studio デバッガーを使用してアプリケーションをデバッグしたとき、ステートメント A への呼び出しが 1 回だけ表示され、何がショックだったのかを推測しました。私は常にi+=1
が等しいと思っていたi=i+1
ので
f()+=1
が等しい とf()=f()+1
が 2 回呼び出されるとf()
思っていましたが、1 つしか表示されませんでした。何じゃこりゃ?私は気が狂っていますか、それとも私のデバッガーは狂っていますか、それとも時期尚早の最適化の結果ですか?