C++ 返回引用/左值

C++ 返回引用/左值,c++,return-type,assignment-operator,lvalue,C++,Return Type,Assignment Operator,Lvalue,我无法理解以下内容: 假设我正在创建一个重载赋值运算符。函数应该是这样的: MyObject& MyObject::operator=(const &rhs) { // code to make this work return *this; } 如果“this”已经是引用,为什么我需要取消引用它?为什么我需要返回对象,而不是返回类型所指示的对象引用?换句话说,为什么不这样做: MyObject& MyObject::operator=(const &am

我无法理解以下内容:

假设我正在创建一个重载赋值运算符。函数应该是这样的:

MyObject& MyObject::operator=(const &rhs)
{
   // code to make this work

   return *this;
}
如果“this”已经是引用,为什么我需要取消引用它?为什么我需要返回对象,而不是返回类型所指示的对象引用?换句话说,为什么不这样做:

MyObject& MyObject::operator=(const &rhs)
{
    // code to make this work

    return this;
}
或者,为什么不这样做呢:

MyObject MyObject::operator=(const &rhs)
{
     // code to make this work

     return *this;
}
我很困惑

如果“this”已经是引用

不幸的是,
尚未作为参考。它是指向调用成员函数的对象的指针


习惯上,尽管没有必要,从赋值返回对当前对象的引用,以模仿内置赋值运算符的行为,但您可以返回任何您喜欢的内容。

您可能需要添加标准“概念”
MoveAssignable
copysignable
要求返回类型为
T&
,返回值为要分配给的对象,因此任何想要与标准库正确交互的类都必须执行您称之为“习惯”的操作