Item 10:赋值运算符要返回自己的引用 Effective C++笔记
2015-08-25 16:05
405 查看
Item 10:Have assignment operators return a reference to *this.
这是关于赋值运算符的编程惯例,用来支持链式的赋值语句:
在C++中,它相当于:
这是因为
所以我们自定义的对象最好也能支持链式的赋值,这需要重载
说到运算符的结合性,不妨来研究一下最费解的运算符
上述代码的输出结果是
因为
那么结合性呢?
输出是:
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/07/28/effective-cpp-10.html
这是关于赋值运算符的编程惯例,用来支持链式的赋值语句:
int x, y, z; ... x = y = z = 1;
在C++中,它相当于:
x = ( y = ( z = 1 ) );
这是因为
=运算符是右结合的,链式赋值时会从右向左运算。链式写法的赋值已经成为了惯例,
所以我们自定义的对象最好也能支持链式的赋值,这需要重载
=运算符时返回当前对象的引用:
class Widget { public: Widget& operator=(const Widget& rhs){ // return type is a reference to return *this; // return the left-hand object } Widget& operator+=(const Widget& rhs){ // the convention applies to return *this; // +=, -=, *=, etc. } };
说到运算符的结合性,不妨来研究一下最费解的运算符
,的行为。首先,它的返回值是后面表达式的值:
int a; a = (1, 2, 3); cout<<a<<endl;
上述代码的输出结果是
3。如果你写成了
a = 1, 2, 3,输出结果将会是
1。
因为
=运算符的优先级高于
,,此时第一个表达式变成了
a = 1,第二个是
b,第三个是
c。
那么结合性呢?
,运算符是左结合的:
cout<<1, cout<<2, cout<<3;
输出是:
123
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/07/28/effective-cpp-10.html
相关文章推荐
- Item 9:在析构/构造时不要调用虚函数 Effective C++笔记
- C/C++中计算程序运行时间
- C++ 11开发环境的搭建(Windows Platform)
- 【c++】猜单词游戏
- Des算法的实现
- 排序算法之插入排序(C语言实现)
- c语言与c++区别
- 二叉树遍历
- 使用C语言判断英文字符大小写的方法
- C++11引用临时变量的终极解析
- C++ List 双向链表 实现 会用也要会写
- 成员函数指针与高性能的C++委托
- C++中的引用在初始化时占用内存吗?
- 关于Azure Storage 的一点研究
- C语言的字符串倒置问题
- C++11新特性
- C++成员初始化列表
- C++数组和函数中的指针
- C++数组和函数中的指针
- c++中类对象不能访问类的私有成员变量