operator= 的一大特点在于可以写成连锁形式:1
2int x,y,z;
x=y=z=15;
operator= 采用右结合律,所以上式被解析为:1
x=(y=(z=15));
为了实现这种连锁赋值,operator=必须返回一个reference指向操作符的左侧实参,这是实现operator=的协议要求:1
2
3
4
5
6
7
8
9class Widget{
public:
...
Widget& operator=(const Widget& rhs){
...
return *this;
}
...
}
该协议不仅仅适用于operator=,也适用于所有赋值相关操作,例如operator+=之类。(关于操作符的复合形式,其实现亦有特点,具体可见More Effective C++ 22)