2017-05-06 172 views
-2

我无法理解以下内容:返回参考值/左值

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

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

我很迷茫。

回答

3

如果 '这个' 已经是一个参考,

不幸的是,this已经是一个参考。它是一个指针到在其上调用的成员函数的对象。

这是习惯,但绝不是必要的,以基准从分配返回到当前对象,以模仿内置赋值运算符的行为,但你可以返回任何你喜欢的。

+0

你可能想补充的是标准的“概念”'MoveAssignable'和'CopyAssignable'要求返回类型为'T&'和返回值是被分配给对象,所以任何类要正确的互操作与标准图书馆必须做你所说的“习惯”。 – Angew