最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!
关于赋值,可以写成连锁形式,如下述代码:
int x,y,z; x = y = z = 15;//赋值的连锁形式
而赋值采用有结合定律,所以上述的连锁赋值被解析为:
x = (y = (z = 15));//15先赋值给z,然后其结果(更新后的z)在赋值给y,然后其结果(更新后的y)在被赋值给x
对于自定义的类,赋值操作符应遵循如下两点规则:
- 返回类型是一个当前类的引用
- 要返回this给左边*的变量
class Widget{
public:
...
Widget& operator=(const Widget& rhs){ //要返回一个当前类的引用
...
return *this; //返回给左边的变量
}
...
};
这个规则同样适用于 +=、-=、*= 等运算符,C++中的内置类型和 STL 提供的类型如 string,vector 等都遵守这个规则。
条款11:在operator=中处理“自我赋值”



