我最近在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()的调用,但我只看到了一次。这是怎么回事?我是疯了还是我的调试器出问题了,还是这是过早优化的结果?
static int x
未初始化。 - Kirill V. Lyadvinsky