Effective C++ 读书笔记 Item10 赋值操作符要返回*this的引用

本文详细介绍了C++中赋值操作符的有趣用法,包括链式赋值、自定义类中赋值操作符的实现规则及返回类型,解释了使用引用的原因,并讨论了this指针的作用。

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

C++的赋值操作符(assignment operator)有一个有趣的用法:

int x, y, z;
x = y = z = 15;            //链式赋值 (Chained assignment)

以上代码会被编译器从最右边开始解析 (right-associative):

x = (y = (z = 15)));

15先被赋值到z,z又被赋值到y,最后y被赋值到x


对于自定义的类,赋值操作符应遵循如下两点规则:

  • 返回类型是一个当前类的引用
  • 要返回*this左边的变量
class Widget{
  public:
    ...
    Widget& operator=(const Widget& rhs){          //要返回一个当前类的引用
      ...
      return *this;                                //返回给左边的变量
    }
    ...
};

用引用是因为:

这样可以避免在函数调用时对实参的一次拷贝,提高了效率。

这个规则对+=, -=, *=等操作符同样适用。C++的自有类型,例如int, double,标准库的类型,例如std::string, std::complex,它们的赋值操作符都遵循这样的规则。


关于this,this是用来指向当前对象的指针,只存在于类的成员函数里,用来防止成员数据和成员函数参数的歧义:

class MessageBox{
  public:
    MessageBox(const std::string& message);
    ...
  private:
    std::string& message;
    ...
};

MessageBox::MessageBox(const std::string& message){
  this -> message = message;
}

这里MessageBox类有一个数据成员叫message,同时它的构造函数也有一个参数叫message,此时为了避免歧义,我们用this->message来代表当前类的message成员。

 

总结:

  • 赋值操作符应返回一个指向*this的引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值