从函数返回引用并修改它

时间:2010-08-07 15:37:06

标签: c++ reference

#include<iostream>
int& f(){
 static int x = 0;
 x++;
 return x;
}

int main(){

  f() += 1; //A

 f() = f() + 1; //B
 std::cout << f();
}

上面的代码在gcc上输出6,在MSVC上输出5。现在,当我将AB修改为f()=f()时,我在两个编译器上都得到5。这有什么大不了的?行为是否未定义。如果是,为什么?

1 个答案:

答案 0 :(得分:5)

未定义,因为在此代码中:

f() = f() + 1;

没有定义首先调用f()。