一、赋值运算符的返回值
- 关于赋值,赋值运算符在每回赋值之后应该是返回“=”操作符左边的对象
演示案例
- 下面的“x=y=z=5”的意识是先将5赋值给z然后对象z,再将z对象赋值给y然后返回对象y,再将对象y赋值给对象x,最终这个表达式的结果是x
int x, y, z;
x = y = z = 5;
二、class内的operator=建议
- 我们建议在重载类的operator=运算符时,应该让这个运算符返回一个*this(指向于自己的类型的引用)
演示案例
class Widget
{
public:
Widget& operator=(const Widget& rhs)
{
return *this; //返回左侧对象
}
};
三、备注
- 对于上面的operator=运算符,其设计规则还适用于其他辅助运算符(例如:+=、-=、*=、/=等登)
- 另外,参数也可以改变
演示案例
class Widget
{
public:
Widget& operator+=(const Widget& rhs)
{
return *this;
}
Widget& operator=(int rhs)
{
return *this;
}
};
四、总结
- 令赋值操作运算符返回一个reference to *this。虽然这个建议不是强制性的,但是建议这么使用,例如所有内置类型和标准程序库的string、vector等都是这么遵守的