#include<iostream>
int& f(){
static int x = 0;
x++;
return x;
}
int main(){
f() += 1; //A
f() = f() + 1; //B
std::cout << f();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在gcc上输出6,在MSVC上输出5.现在,当我修改A,并B给f()=f()我弄5两种编译器.这有什么大不了的?行为是否未定义.如果是,为什么?
小智 5
它是未定义的,因为在此代码中:
f() = f() + 1;
Run Code Online (Sandbox Code Playgroud)
没有定义哪个调用f()首先发生.