C++从类成员函数返回值

Ton*_*ony 1 c++ class function

我无法理解为什么a.funct()可以是赋值运算符的左操作数,即使funct()没有返回l值引用.

class A
{
public: 
    A funct () {A x; return x;}
};

int main () 
{
    A a,b; a.funct()=b;
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

在类的自动生成方法中,有

A& operator = (const A&);
Run Code Online (Sandbox Code Playgroud)

这使得a.funct() = b合法.

为了禁止对rvalue的影响,你可以从C++ 11开始编写和实现

A& operator = (const A&) &; // Note the last &
Run Code Online (Sandbox Code Playgroud)

所以分配只适用于左值.