我不明白为什么即使funct()不返回左值引用,a.funct()仍可以是赋值运算符的左操作数。
class A
{
public:
A funct () {A x; return x;}
};
int main ()
{
A a,b; a.funct()=b;
}
最佳答案
在该类的自动生成的方法中,有
A& operator = (const A&);
使
a.funct() = b
合法。为了避免影响右值,自C++ 11起,您可以编写并实现
A& operator = (const A&) &; // Note the last &
因此赋值仅适用于左值。