gcc の奇妙な動作を指摘しました。同じ変数が同じ命令で使用され、この変数が 1 つの関数呼び出し (参照またはポインターによって渡された変数) によって変更された場合、変数の変更は他の関数の変更されません。同じ指示。
それは通常の C++ の動作ですか、それとも偽物ですか?
注: 最適化 (-O) フラグは設定されていません。
注 2: これは、solaris CC コンパイラで問題なく動作します。
gcc 4.5.3 を使用したデモ (Linux または mingw/cygwin 上)
class C {
public:
const C & inc(int & i) const
{
++i;
cout << "inc: i = " << i << endl; return *this;
}
const C & see(int i) const
{
cout << "see: i = " << i << endl; return *this;
}
const C & see2(const int & i) const {
cout << "see2: i = " << i << endl; return *this; }
};
int main()
{
C c;
int i = 0;
c.see(i).inc(i).see(i).see2(i).inc(i).see(i).see2(i);
c.see(i);
return 0;
}
出力:
see: i = 0
inc: i = 1
see: i = 0 : 1 予想
see2: i = 1
inc: i = 2
see: i = 0 : 2 予想
see2: i = 2
see: i = 2