C++中赋值遵循右结合律,即
int x, y, z;
x = y = z = 15;
相当于
x = (y = (z = 15));
为了实现如上的连续赋值,赋值操作符(包括+=,-=等等)必须返回一个引用指向操作符左侧实参:
class Widget{
public:
…
Widget& operator=(constWidget& rhs)//返回类型是个引用,指向当前对象
{
…
return *this;//返回左侧对象
}
}
所有内置类型以及标准程序库中的类型都遵守这个规则,虽非强制,但用户自定义的赋值操作符最好也能遵守。