Effective C++条款10——operator=返回一个reference to *this(构造/析构/赋值运算)

news/2024/11/23 4:36:42/

关于赋值,有趣的是你可以把它们写成连锁形式:

int x, y, z;
x = y = z = 15;            // 赋值连锁形式

同样有趣的是,赋值采用右结合律,所以上述连锁赋值被解析为:

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

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

为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参。这是你为classes实现赋值操作符时应该遵循的协议:

class Widget {
public:// ...Widget& operator=(const Widget& rhs) {       // 返回类型是个reference,指向当前对象// ...return *this;                            // 返回左侧对象}// ...
};

这个协议不仅适用于以上的标准赋值形式,也适用于所有赋值相关运算,例如;

class Widget {
public:// ...Widget& operator += (const Widget& rhs) {            // 这个协议适用于+=,-=,*=等等// ...return *this;}// ...Widget& operator=(int rhs) {                       // 此函数也适用// ...return *this;                            }// ...
};

注意,这只是个协议,并无强制性。如果不遵循它,代码一样可通过编译。然而这份协议被所有内置类型和标准程序库提供的类型如string, vector,complex,tr1::shared _ptr或即将提供的类型(见条款54)共同遵守。因此除非你有一个标新立异的好理由,不然还是随众吧。

请记住

  • 令赋值( assignment)操作符返回一个reference to *this。

http://www.ppmy.cn/news/1049401.html

相关文章

Qt 显示git版本信息

项目场景: 项目需要在APP中显示当前的版本号,考虑到git共同开发,显示git版本,查找bug或恢复设置更为便捷。 使用需求: 显示的内容包括哪个分支编译的,版本号多少,编译时间,以及是否…

问卷都有哪些类型?

问卷调查是一种常见的研究方法,用于收集大量数据和信息。无论是进行市场研究、社会调查还是学术研究,问卷调查都是一个重要的工具。那么,问卷调查类型有哪些呢?在这篇文章中,我们将介绍几种常见的问卷调查类型。 1、目…

Linux的热拔插UDEV机制

文章目录 UDEV简介守护进程基本特点 守护进程和后台进程的区别开发守护进程结束 UDEV简介 udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。 udev在用户空间运行,而不在内核空间 …

bindtap和catchtap的区别?

在微信小程序中,bindtap 和 catchtap 都是用于绑定点击事件的属性,但它们在事件冒泡和事件捕获方面有所不同。下面是它们的区别: bindtap: bindtap 用于绑定点击事件,当元素被点击时,该事件会被触发。事件…

搭建开发环境-操作系统篇(一键搭建开发环境)

概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…

排序(七种排序)

1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 1.插入排序 1.1思路 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列 1.2实现 //插入排…

部署问题集合(特辑)虚拟机常用命令

基础 查看ip:ip addr或ipconfig压缩:tar -zcvf redis-3.2.8.tar.gz redis-3.2.8/ 注意:-zcvf对应gz,-vcf对应tar 解压:tar -zxvf redis-3.2.8.tar.gz查看文件底部内容:tail -n 100 error.log循环查看底部内…

(第三方满意度调研公司)供应商满意度指标设计

设计供应商满意度指标时,需要考虑到供应商与客户之间的关键因素和要素。以下是一些可以包含在供应商满意度调查中的重要指标: 1.产品/服务质量:评估客户对供应商提供的产品或服务质量的满意度。这包括可靠性、耐用性、功能性以及是否符合客户…