[Effective C++ --010]令赋值操作符返回一个reference to *this
差不多最经典的就是这个了:
x = y = z = ;
解读为:
x = (y = ( z = ));
如果没有返回值,上述代码就不能通过编译。
其实看到标题就差不多明白这一条了,但是为什么连续赋值时最好让其返回一个reference to *this呢?
我们来举一个例子:
如果我们定义一个类R:
R r1(3, 4);
R r2;
R r3(4, 3);
cout << "r1 = " << r1 << ", r2 = " << r2 << ", r3 = " << r3 << endl;
(r3 = r2) = r1; //注意这里
cout << "r1 = " << r1 << ", r2 = " << r2 << ", r3 = " << r3 << endl;
其实从编译器角度来看,是不是reference都是OK的。
但在有注释的代码行处,是不是reference返回的结果是不同的。
如果是reference,那么r3的值会被r1覆盖;
如果不是reference,那么r3的复本被r1覆盖,但r3本身不会改变。
对于连等,一般还是觉得r3的值跟r1一样会比较正常,所以加上reference,当然如果你刻意不想让r3在连等中改变两次值,那就不要reference了。
[Effective C++ --010]令赋值操作符返回一个reference to *this的更多相关文章
- 令assignment操作符返回一个reference to *this
		
[令assignment操作符返回一个reference to *this] 关于赋值,可以把它们写成连锁形式: int x, y, z; x =y =z =15; II赋值连锁形式 上述连锁赋值被解 ...
 - Effective C++ 条款九、十  绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this
		
1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始 ...
 - NO.9: 令operator=返回一个reference to *this
		
1.令赋值操作返回一个reference to *this(除非你有个标新立异的理由,那就随大众- - )
 - Effective C++(10)  重载赋值操作符时,返回该对象的引用(retrun *this)
		
问题聚焦: 这个准则比较简短,但是往往就是这种细节的地方,可以提高你的代码质量. 细节决定成败,让我们一起学习这条重载赋值操作符时需要遵守的准则吧. 还是以一个例子开始: Demo // 连锁赋值 x ...
 - Effective C++ -----条款10: 令operator=返回一个reference to *this
		
比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个referen ...
 - Effective C++ 条款10:令operator= 返回一个reference to *this
		
class Widget { public: ... Widget& operator+=(const Widget& rhs) // 返回类型是个reference,指向当前对象 { ...
 - 条款10:令operator=返回一个reference to * this(Have assignment operators return a reference to *this)
		
NOTE: 1.令赋值(assignment)操作符返回一个reference to *this. 2.此协议适用于所有赋值相关的运算比如:+= -= *=....
 - 条款10:令operator= 返回一个reference to *this
		
关于赋值,可以写成连锁形式: int x, y, z; x = y = z = 15; //赋值连锁形式 赋值采用右结合律,故上述赋值被解析为: x = (y = (z = 15)); 为了实现连锁赋 ...
 - 【10】令operator=返回一个reference to *this
		
1.令operator= 返回一个reference to *this,为什么? 这只是一个协议,并无强制性.但是,为了与基本类型的行为保持一致性,强烈建议这么做.设计class 有一个宝典:一旦有疑 ...
 
随机推荐
- 在 Azure 中使用公用 IP 创建多 NIC VM
			
Russ Slaten 2014年 11 月 18日下午 4点 我们最近宣布了支持具有多个网络接口控制器 (NIC) 的虚拟机 (VM).我仍在努力了解此功能适用的所有新场景,但首先,我希望亲自测试 ...
 - RHCS集群
			
理论基础: User → HA → Lb → web → sql → 分布式filesystem ->磁盘I/O 用户 高可用 负载均衡 应用 数据库 mf ...
 - 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!
			
原文网址:http://www.111cn.net/sj/android/46484.htm 使用方法是这样的,Activity.showDialog()激发Activity.onCreateDial ...
 - .NET 4.0中的泛型协变和逆变
			
随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力 ...
 - 33、多线程断点下载的实现&界面的更新
			
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
 - 【转】vnc centos
			
原文:http://www.cnblogs.com/niocai/archive/2011/11/02/2233332.html 我的CentOS版本是6.0,下述方法在i386和x86_64中均适用 ...
 - 【原】Redis-LRU缓存
			
Redis高级篇 Redis-LRU缓存 将Redis作为缓存使用时,有时添加新数据时,旧数据是很难被清空的. LRU(Least Recently Used) 近期最少使用算法是常用算法之一. 最大 ...
 - [转载]su认证失败
			
Ubuntu 安装后,root用户默认是被锁定了的,不允许登录,也不允许 "su" 到 root.有人说这是个不好的实践,特别是对于服务器来说.我觉得对于桌面用户来说,这样安全性更 ...
 - Android开发错误信息收集
			
android sdk 无法更新或更新太慢 备注信息:sdk manager中加入mirrors.opencas.org,强迫http方式 ADT下载地址:http://dl.google.com/a ...
 - 初学XPath,其实很简单
			
XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. (我的理解:XPath 就是一个用来查找xml节点的路径语言,一个路径字符串语法) XM ...