operator= 最好返回*this的引用

探讨了EffectiveC++条款10中关于operator=返回引用的原因,通过实例演示了如何实现对象的连锁赋值,揭示了返回引用在实现复杂赋值表达式中的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EffectiveC++条款10里说:令operator=返回一个reference to this,就是说对赋值运算符重载时,最好返回this的引用,返回*this很好理解,返回引用一方面是为了提高效率,减少了拷贝的过程,另一方面书上说的是为了实现连锁赋值,也就是:
x = y = z = 15;
的形式,真的是这样的吗,我写了个程序测试一下

#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Name
{
public:
 Name() = default;
 Name(string s) : name(s) {}
 void setName(string s)
 {
  name = s;
 }
 void print()
 {
  cout << name << endl;
 }
 Name operator=(const Name& rhs) //直接返回对象
 {
  this->name = rhs.name;
  return *this;
 }
private:
 string name = "Empty";
};
int main()
{
 Name obj1;
 Name obj2("liurui");
 Name obj3;
 obj3 = obj1 = obj2;
 obj1.print();
 obj2.print();
 obj3.print();
 return 0;
}

程序的输出结果是:
在这里插入图片描述 可以看到程序直接返回对象,也实现了连锁赋值,实际上赋值符号满足右结合律,上述连锁赋值实际上是:
x = (y = (z = 15));
所以返回对象或者引用都可以实现连锁赋值,但如果要实现如下的赋值:
(x = y)= z;
就必须返回引用才能实现。
总之,返回reference to *this总没有错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值