我不明白为什么即使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 &

因此赋值仅适用于左值。

10-06 01:01