关于赋值,可以写成连锁形式:

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

赋值采用右结合律,故上述赋值被解析为:

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

为了实现连锁赋值,赋值操作符必须返回一个reference引用指向操作符的左侧实参。

下面示例是为classes实现赋值操作符时应该遵循的协议:

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

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

class Widget
{
public:
...
//这个协议适用于+=,-=,*=,等等
Widget& operator+=(const Widget& rhs) //返回类型是个reference,指向当前对象
{
...
return *this;
}
Widget& operator=(int rhs) //此函数也适用,即使此操作符的参数类型不符合协定
{
...
return *this;
}
...
};

这份协议被所有内置类型和标准程序库提供的类型如string,vector,complex,trl::shared_ptr或即将提供的类型共同遵守。

请牢记:

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

最新文章

  1. 【再探backbone04】单页应用的基石-路由处理
  2. SQL-基础知识
  3. 利用freemarker 静态化网页
  4. Oracle 11g导入导出命令
  5. eMMC的MMC模式与SPI模式
  6. CSS3属性值之box-shadow
  7. iOS 让UIButton根据文字内容自动计算宽高
  8. n++与++n的区别
  9. redhat7 常用命令
  10. linux系统安装配置exim4(源码安装)
  11. python之文件读写详解
  12. 利用Zabbix来监控Windows Performance Counter
  13. TP3.2 URL传参及模板输出
  14. mysql alter 添加索引
  15. vue-x action 的相互调用
  16. 【资源大全】.NET资源大全中文版(Awesome最新版)
  17. CSS的浮动(float)
  18. canvas制作的烟花效果
  19. Appium+python HTML测试报告(1)(转)
  20. Unix系统编程()在堆上分配内存

热门文章

  1. Android推送服务——百度云推送
  2. 利用WPF建立自己的3d gis软件(非axhost方式)(三)矢量数据显示控制
  3. CSS 常用 background 设置
  4. numpy 辨异(四)—— np.repeat 与 np.tile
  5. Python logging模块无法正常输出日志
  6. python reversed
  7. 用 Expression Blend 创建酷炫的 Button
  8. build-qt.sh(Cross compile in Linux for Windows)
  9. 你所不知道的 Kindle - 阅读微信公众号文章
  10. XF 通过判断平台加载不同的图片