gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:40 25 4
gpt4 key购买 nike

看下面的代码:

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

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

enter image description here

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

Widet operator=(Widet &rhs)
{
value = rhs.value;
return *this;
}

同样运行成功,输出为:

enter image description here

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

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

最佳答案

Why the second code runs well?Should not we get a error?

因为它是完全有效的代码。它返回对象的临时拷贝,并且您可以在临时对象上调用成员函数(包括 operator=()),因此没有错误。

如果对象是不可复制的,你会得到一个错误。

Why it is a good habit to return reference to *this instead of *this?

因为并不是所有的对象都是可复制的,而且有些对象的复制成本很高。您可以获取对任何对象的引用,并且引用的传递总是很便宜的。

关于C++ operator= 返回对 *this 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com