C++ operator =返回*this的引用

Xia*_*Jun 5 c++ return-type

看下面的代码:

#include <iostream>
using namespace std;

class Widet{
public:
    Widet(int val = 0):value(val)
    {

    }

    Widet& operator=(Widet &rhs)
    {
        value = rhs.value;
        return *this;
    }
    int getValue()
    {
        return value;
    }
private:
    int value;
};

int main()
{
    Widet obj1(1);
    Widet obj2(2);
    Widet obj3(0);
    (obj3 = obj2) = obj1;
    cout << "obj3 = " << obj3.getValue() << endl;
}
Run Code Online (Sandbox Code Playgroud)

代码运行成功,输出为(使用VS2008):

在此输入图像描述

当我让operator =返回一个值而不是引用时:

Widet operator=(Widet &rhs)
{
    value = rhs.value;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

它也成功运行,输出为:

在此输入图像描述

我的问题是:为什么第二个代码运行良好?我们不应该得到错误吗?

为什么返回引用*this而不是*this这是一个好习惯?

Mik*_*our 8

为什么第二个代码运行良好?我们不应该得到错误吗?

因为它是完全有效的代码.它返回对象的临时副本,并允许您operator=()在临时对象上调用成员函数(包括),因此没有错误.

如果对象不可复制,您将收到错误.

为什么返回引用*this而不是*this这是一个好习惯?

因为并非所有对象都是可复制的,并且某些对象的复制成本很高.您可以引用任何对象,并且引用总是很便宜.