令operator = 返回一个reference to *this
int x, y, z;
x = y = z = 15;
这是“连锁赋值”。
对于自定义类,如果要满足连锁赋值,赋值操作符必须返回一个引用指向操作符的左侧实参。其他复合赋值操作符也一样。
class Widget
{
public:
...
Widget& operator = (const Widget& rhs) // 赋值操作符
{
...
return *this;
}
Widget& operator += (const Widget& rhs) // 复合赋值操作符
{
...
return *this;
}
...
}
赋值操作符返回引用并无强制性,不返回引用编译器一样能够编译通过。
只是像STL中的string、vector、complex都遵循“赋值操作符、复合赋值操作符都返回引用”这一个规则,建议自定义类也遵循。
请注意:
- 令赋值(assignment)操作符返回一个 reference to *this。