《Effective C++ 》学习笔记——规定10
2015-12-12 13:22
477 查看
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
二、Constructors,Destructors and Assignment Operators
Rule 10:Have assignment operators return a reference to *this
规则10:令operator= 返回一个 reference to *this
关于赋值,有一个非常有趣的连锁代码:
并且,C++採用右结合律,假设用括号来代表优先计算顺序。就是这种:
C++中,为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左側实參。
(注意。这是classes 实现赋值操作符时应该遵循的协议)
并且这个协议不仅适用于以上的标准赋值形式,也适用于全部赋值相关的运算。比方+=、-=、*= 等:
可是,要注意这仅仅是一个协定。并无强制性,假设不遵循它,代码一样能够通过编译。
然而这份协议被全部内置类型和标准程序库提供的类型,如 string、vector、complex,trl::shared_ptr 等共同遵守。
所以除非有足够的理由去另类一下,不然还是从众吧。
☆请记住
令 assignment(赋值) 操作符返回一个 reference to *this。
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
二、Constructors,Destructors and Assignment Operators
Rule 10:Have assignment operators return a reference to *this
规则10:令operator= 返回一个 reference to *this
关于赋值,有一个非常有趣的连锁代码:
int x,y,z; x = y = z = 15; // 赋值的连锁形式
并且,C++採用右结合律,假设用括号来代表优先计算顺序。就是这种:
x = ( y = ( z = 15 ) ) ;
C++中,为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左側实參。
(注意。这是classes 实现赋值操作符时应该遵循的协议)
<span style="font-size:14px;">class Widget { public: ... Widget& operator=( const Widget& rhs )<span style="white-space: pre;"> </span>// 返回类型是个reference { ... return* this;<span style="white-space: pre;"> </span>// 返回左側对象 } ... };</span>
并且这个协议不仅适用于以上的标准赋值形式,也适用于全部赋值相关的运算。比方+=、-=、*= 等:
Widget& operator+=( const Widget& rhs ) { ... return *this; }
可是,要注意这仅仅是一个协定。并无强制性,假设不遵循它,代码一样能够通过编译。
然而这份协议被全部内置类型和标准程序库提供的类型,如 string、vector、complex,trl::shared_ptr 等共同遵守。
所以除非有足够的理由去另类一下,不然还是从众吧。
☆请记住
令 assignment(赋值) 操作符返回一个 reference to *this。
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
相关文章推荐
- C语言总结(全部)
- Android实时获得经纬度,发送给c++服务端
- C++ 函数传参
- Count and Say
- Count and Say
- 实战c++中的string系列--string到LPCWSTR的转换
- 实战c++中的string系列--string到LPCWSTR的转换
- 实战c++中的string系列--std::string与MFC中CString的转换
- 实战c++中的string系列--std::string与MFC中CString的转换
- c++ 银行管理系统
- VC++ 获取mac地址
- (Win32): 已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
- C++中的成员变量是独立的,成员方法是共享的。
- CPP 6th——类(7)
- c++操作xml
- 11_排序二叉树删除-3
- c语言学习笔记之指针
- String C++完整实现。
- C语言总结
- c语言学习笔记之函数指针和指针函数