为什么返回引用
- 为了支持连锁赋值
- 返回引用可以节省资源,不必要为返回值调用构造函数了
什么是连锁赋值
int x,y,z;
x = y = z = 5;
这种赋值方式称为连锁赋值,它满足右结合律
x = ( y = ( z = 5 ));
赋值表达式z = 5
执行后,将更新后的z值赋值给y,以此类推。
自定义类型的连锁赋值
Widget m;
...
Widget x, y, z;
x = y = z = m;
为了支持这种连锁赋值,z = m
执行后,必须返回Widget类型的对象或该类型对象的引用
否则 y = ...
会因为类型不同而报错
而且返回引用可以节省资源,不必要为返回值调用构造函数了。所以operator=
应返回该类型对象的引用
class Widget{
public:
Widget& operator=(const Widget& rhs)
{
...
return *this;
}
};
这一规则对所有赋值相关的运算都适用,如+=
等