#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。现在,当我将 A
和 B
修改为 f()=f()
时,我在两个编译器上都得到了 5。这有什么大不了的?行为是否未定义。如果是,为什么?
最佳答案
它是未定义的,因为在这段代码中:
f() = f() + 1;
未定义对 f() 的哪个调用先发生。
关于c++ - 从函数返回引用并修改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430981/