【问题标题】:Returning a reference/lvalue返回参考/左值
【发布时间】:2017-10-05 01:33:15
【问题描述】:

我无法理解以下内容:

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

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;
}

我很困惑。

【问题讨论】:

    标签: c++ return-type assignment-operator lvalue


    【解决方案1】:

    如果'this'已经是一个引用,

    很遗憾,this不是已经是参考。它是一个指针,指向调用成员函数的对象。

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

    【讨论】:

    • 您可能想补充一点,标准的“概念”MoveAssignableCopyAssignable 要求返回类型为 T& 并且返回值是分配给的对象,因此任何类想要与标准库正确互操作的,必须做你所谓的“习惯”。
    猜你喜欢
    • 2021-11-14
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多