博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记 effective c++ Item 10 让赋值运算符返回指向*this的引用
阅读量:5835 次
发布时间:2019-06-18

本文共 1116 字,大约阅读时间需要 3 分钟。

一个关于赋值的有趣的事情是你可以将它们链在一起:

1 int x, y, z;2 3 x = y = z = 15; // chain of assignments

同样有趣的是赋值采用右结合律,所以上面的赋值链被解析成下面这个样子:

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

在这里,15被赋值给z,然后赋值的结果(更新的z)被赋值给y,再然后赋值的结果(更新的Y)被赋值给x。

实现这个赋值链的方法是使赋值返回指向左边参数的引用,这也是你在为你的类实现赋值运算符的时候应该遵守的约定:

1 class Widget { 2  3 public: 4  5 ... 6  7 Widget& operator=(const Widget& rhs) // return type is a reference to 8  9 { // the current class10 11 ...12 13 return *this; // return the left-hand object14 15 }16 17 ...18 19 };

这个约定除了适用于上面的标准形式之外,也适用于所有的赋值运算符,因此:

1 class Widget { 2  3 public: 4  5 ... 6  7 Widget& operator+=(const Widget& rhs) // the convention applies to 8  9 { // +=, -=, *=, etc.10 11 ...12 13 return *this;14 15 }16 17 Widget& operator=(int rhs) // it applies even if the18 19 { // operator’s parameter type20 21 ... // is unconventional22 23 return *this;24 25 }26 27 ...28 29 };

这仅仅是一个约定,没有遵循这个约定的代码也能通过编译。然而,所有的内建类型和标准库(像string,vector,complex,tr1::shared_ptr等等)中的所有类型(或即将提供的类型,见Item54)都遵守这个约定。因此除非你有更好的理由,否则请遵守这个约定。

作者:
博客地址:
个人博客:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,
如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

你可能感兴趣的文章
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
此博客不再发表对自己私事的看法
查看>>
导致Asp.Net站点重启的10个原因
查看>>
【PMP】Head First PMP 学习笔记 第一章 引言
查看>>
抓住云机遇编排工作 搞定复杂IT工作流
查看>>
MYSQL的longtext字段能放多少数据?
查看>>
MTK 平台上如何给 camera 添加一种 preview size
查看>>
云计算最大难处
查看>>
关于数据分析思路的4点心得
查看>>
Memcached安装与配置
查看>>
美团数据仓库的演进
查看>>
SAP被评为“大数据”预测分析领军企业
查看>>
联想企业网盘张跃华:让文件创造业务价值
查看>>
记录一次蚂蚁金服前端电话面试
查看>>
直播源码开发视频直播平台,不得不了解的流程
查看>>