当前位置: 首页 > news >正文

Effective C++ 学习笔记 条款10 令operator=返回一个reference to *this

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

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、conplex、tr1::shared_ptr或即将提供的类型(见条款54)共同遵守。因此除非你有一个标新立异的好理由,不然还是随众吧。

请记住:
令赋值(assignment)操作符返回一个reference to *this。

http://www.lryc.cn/news/312407.html

相关文章:

  • 算法简单试题
  • CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
  • 蓝桥集训之牛的学术圈 I
  • 软件设计师软考题目解析21 --每日五题
  • python读写json文件详解
  • #include<ros/ros.h>头文件报错
  • mybatis单表curd笔记(尚硅谷
  • 在线重定义-操作步骤
  • 16:00面试,16:06就出来了,问的问题过于变态了。。。
  • 基于dashscope在线调用千问大模型
  • 【Python】可变数据类型 不可变数据类型 || hash
  • MySQL 篇-深入了解多表设计、多表查询
  • 【Java】Spring的ReflectionUtils类常用方法学习笔记
  • 内存函数详解
  • 事务(transaction)
  • Linux之cd、pwd、mkdir 命令
  • 【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)
  • 学习JAVA的第十五天(基础)
  • LVS四层负载均衡集群
  • 【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环
  • MAC | linux | SSH 密钥验证
  • 【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制
  • 机器学习-面经(part7、无监督学习)
  • teknoparrot命令行启动游戏
  • 停止Tomcat服务的方式
  • 多线程相关面试题(2024大厂高频面试题系列)
  • mysql 时间精度问题
  • 基于python的爬虫原理和管理系统实现(代码下载)
  • IOS 设置UIViewController为背景半透明浮层弹窗,查看富文本图片详情
  • 网络层介绍