以下所述都是根据《Effective C++》中条款10、11和12总结所得。
一、令operator=发挥一个reference to *this
连锁形式赋值:
int x, y, z;
x = y = z = 15;
//复制采用右结合律,以上赋值被解析为:
x = (y = (z = 15));
为了实现“连锁赋值”,复制操作符必须返回一个reference指向操作符的左侧实参。当然这只是一个协议,没有强制性。不遵守的话,代码一样可以通过。
class Widget{
public:
...
//返回类型是个reference,指向当前对象
Weight& operator(const Widget& rhs)
{
...
return* this; //返回左侧对象
}
};
当然这个协议也适用于+=,-=,*=等等复制相关运算。