我最近在 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 的调用,猜猜我感到震惊的是什么。我一直认为i+=1
等于i=i+1
所以
f()+=1
等于f()=f()+1
,我会看到两个对 的调用f()
,但我只看到一个。这是什么鬼?我是疯了还是我的调试器疯了还是这是过早优化的结果?