令 operator= 返回一个 reference to *this

关于赋值

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

赋值采用右结合律,所以上述连锁被解析为:
x = ( y = ( z = 4 ) );
就是 4 先赋值给 z,然后 z 的值再赋值给 y,更新 y 的值在赋值给 x。
为了实现连锁赋值,赋值操作符必须返回一个 reference 指向操作符的左侧实参。这是你为 classes 实现赋值操作符是应遵循的协议:

class Assign {public:...Assign& operator=(const Assign& r){...return *this;}...
};

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

class Assign {public:...Assign& operator+=(const Assign& r){    // 这个协议适用于 +=,-=,*= 等等...return *this;}Assign& operator+=(int r){           // 此函数也适用,即使此一操作符的参数类型不符合协定...return *this;}...
};

*这只是一个大众化的规范,并不强制遵循要求。
请记住:
令赋值(assignment)操作符返回一个 reference to *this。

Effective C++ 条款10_不止于此相关推荐

  1. Effective C++ 条款11_不止于此

    在 operator= 中处理 "自我赋值" " 自我赋值 " 发生在对象被赋值给自己时: class Getself { ... }; Getself w; ...

  2. effective c++条款11扩展——关于拷贝构造函数和赋值运算符

    effective c++条款11扩展--关于拷贝构造函数和赋值运算符 作者:冯明德 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符. 以下讨论中将用到的例 ...

  3. Effective C++条款09:绝不在构造和析构过程中调用virtual函数

    Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...

  4. effective c++条款44 将与参数无关的代码抽离templates

    effective c++条款44 将与参数无关的代码抽离templates 首先了解这个条款的含义:使用template可能导致代码膨胀,二进制码会带着重复(或者几乎重复)的代码.数据,或两者.其结 ...

  5. Effective C++ 条款02:尽量使用const,enum,inline替换#define

    Effective C++ 条款02:尽量使用const,enum,inline替换#define 用另一句话说:用编译器代替预处理器比较好. 举个例子:加入定义一个常量: #define ASPEC ...

  6. Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)

    Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls) 条款05:了解C++默默编写 ...

  7. Effective C++条款40:明智而审慎地使用多重继承(Use multiple inheritance judiciously)

    Effective C++条款40:明智而审慎地使用多重继承(Use multiple inheritance judiciously) 条款40:明智而审慎地使用多重继承 1.多重继承的两个阵营 2 ...

  8. Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously)

    Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously) 条款39:明智而审慎地使用private继承 1.pr ...

  9. Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value

    Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to p ...

最新文章

  1. 【Go】Go基础(八):结构体和方法
  2. Educational Codeforces Round 90 (Rated for Div. 2)部分题解
  3. HPUX在oracle10g安装和卸载缩写
  4. SpringAOP静态代理和动态代理
  5. c语言基础傅里叶变换,急求:C语言如何实现快速傅里叶变换
  6. STM32 软件模拟 IIC 代码,标准库、HAL库可用
  7. 西河某人_如何使用增强现实祝某人生日快乐
  8. eclipse远程调试liunx下的tomcat
  9. 用chrome开发的时候关掉AdBlock插件
  10. 美国通胀放缓幅度超预期 美元或面临进一步承压?
  11. 计算机软件企业账务处理,企业购买软件会计上如何处理
  12. python的模块和包
  13. matlab单频噪声,基于MATLAB有噪声语音信号处理
  14. matlab做gui界面抛体运动,用MATLAB进行抛体运动中的探讨模拟
  15. python汇率转换_python汇率兑换
  16. SpringBoot优雅停机的正确姿势!
  17. MacBook系统升级问题
  18. c语言分桃分题设计思路,C语言实现的猴子分桃问题算法解决方案
  19. 07,springcloudalibaba_sentinel(流量卫兵)
  20. 战火与秩序迁城显示服务器忙,战火与秩序迁城方法介绍

热门文章

  1. ubuntu20 降低python版本后 打不开终端 NO module named ‘gi’
  2. 从知道到懂得,从懂得到做到
  3. 基本流程图的制作-通过在线制图工具绘制
  4. 基于视频评论数据分析+数可视化 附完整教程
  5. Android Hawk的源码解析,一款基于SharedPreferences的存储框架
  6. IT培训讲师的亲身感受
  7. 国内哪个域名注册商比较好?怎样选择域名注册商?
  8. android 如何检查外部来源,Android是如何判断APK是否不明来源的
  9. Java的String类中提到的代码点,代码单元到底是什么?
  10. Linux下使用Git连接GitHub