条款10:令operator= 返回一个reference to *this
关于赋值,可以写成连锁形式:
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
条款10:令operator= 返回一个reference to *this的更多相关文章
- Effective C++ -----条款10: 令operator=返回一个reference to *this
比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个referen ...
- 【10】令operator=返回一个reference to *this
1.令operator= 返回一个reference to *this,为什么? 这只是一个协议,并无强制性.但是,为了与基本类型的行为保持一致性,强烈建议这么做.设计class 有一个宝典:一旦有疑 ...
- 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.此协议适用于所有赋值相关的运算比如:+= -= *=....
- Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this
1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始 ...
- NO.9: 令operator=返回一个reference to *this
1.令赋值操作返回一个reference to *this(除非你有个标新立异的理由,那就随大众- - )
- 条款10:让operator=返回一个reference to *this
例如对象x,y,z.要实现连锁赋值(假设operator=已经重载过了):x = y = z,那么operator=则必须返回一个*this. 注意这个条款不仅仅适合于operator=,对于oper ...
- 条款10:令operator=返回一个*this的引用
为了编程的简洁性,有时候需要串联赋值,如:x = y = z = 15; 由于赋值采用右结合,因此上述语句被解释为:x = (y = (z = 15)); 为了实现串联赋值,复制操作符函数必须返回一个 ...
- 令assignment操作符返回一个reference to *this
[令assignment操作符返回一个reference to *this] 关于赋值,可以把它们写成连锁形式: int x, y, z; x =y =z =15; II赋值连锁形式 上述连锁赋值被解 ...
随机推荐
- WPF 高性能笔
原文:WPF 高性能笔 本文告诉大家WPF的INK的实现,和如何做一个高性能的笔. 高性能的笔迹在 WPF 包含两个部分,一个是就是输入,第二个就是渲染. 如果需要经过路由事件才收到输入,如果有人在路 ...
- JDBC读取Oracle的US7ASCII编码中文乱码及不同编码下汉字占用字节的问题
数据库版本号:Oracle 10g 字符集:SIMPLIFIED CHINESE_CHINA.US7ASCII JDK:1.6.0_45 Oracle驱动:ojdbc14.jar 使用JDBC操作数据 ...
- 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)
GetLastInputInfo是检测系统输入的,应用到某个程序中不合适! 此问题有二种解法来监控输入消息: 1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK 2.在Applic ...
- 0-1分布(伯努利分布)、n 重伯努利分布(二项分布)
1. 0-1 分布(伯努利分布) 0-1分布又名两点分布,或叫伯努利分布. P{X=k}=pk(1−p)1−k 其中 k=0,1. 伯努利分布未必一定是 0-1 分布,也可能是 a-b 分布,只需满足 ...
- 写在使用 Linux 工作一年后
start 去年公司空了几台台式机,当时看了下似乎配置比我用的乞丐版 air 略高一些,而且除了 ssd 以外还有一个 1T 的大硬盘,加上后面可能会有一段时间不做 iOS 了,那就不需要 macOS ...
- Android官方教程翻译(2)——运行第一个程序
转载请注明出处:http://blog.csdn.net/dawanganban/article/details/9823623 Running Your App PREVIOUSNEXT THIS ...
- Boost智能指针-基础知识
简单介绍 内存管理一直是 C++ 一个比較繁琐的问题,而智能指针却能够非常好的解决问题,在初始化时就已经预定了删除.排解了后顾之忧.1998年修订的第一版C++标准仅仅提供了一种智能指针:std::a ...
- B 维背包+完全背包 Hdu2159
<span style="color:#3333ff;">/* ---------------------------------------------------- ...
- WinEdt && LaTex(五)—— 内容的排版
1. 无序列表 需要的环境是\begin{itemize} \end{itemize} \begin{itemize} \item hello \item world \end{itemize} 2. ...
- 王立平--android这四个组成部分
Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content provider Activity:activity是用户和应用程序交 ...