我指出了一个奇怪的 gcc 行为:当在同一条指令上使用相同的变量时,并且当这个变量被一个函数调用(通过引用或指针传递的变量)修改时,变量的变化不会被其他函数修改相同的指令。
这是正常的 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;
}
输出:
参见:i = 0
inc:i = 1
参见:i = 0 :1 预期
see2:i = 1
inc:i = 2
参见:i = 0 :2 预期
see2:i = 2
参见:i = 2