惊讶!返回类实例的函数,其返回值竟然是左值?
一直以为,只有返回引用的函数,其返回值才是左值,才可以被赋值,被取地址,但是看effective c++ 3rd发现不是这么回事,用vc++实验,还真是令我惊讶!
R {
};
R f()
{
return R();
}
int f2()
{
return 8;
}
int main()
{
R a;
f() = a; // ok!
f2() = 7; // error!
}
f() = a没问题,f2() = 7就错误,f()返回R实例,它可以被赋值吗?它是左值,那返回int的f2(),为什么不能被赋值,为什么不是左值呢?好困惑!