20180308 C++ 令operator= 返回一个 reference to this
令operator= 返回一个 reference to *this
为了实现“连锁赋值”(x=y=z=5;),赋值操作符必须返回一个reference指向操作符的左侧实参。这是你为class实现赋值操作符时应该遵循的协议:
class Widget{
public:
....
Widget& operator=(const Widget& rhs)//返回类型是个reference
{ //指向当前对象
...
return *this; //返回左侧对象
}
...
}
这个协议不仅适用于以上的标准赋值形式,也适用于所有赋值相关运算,例如:
class Widget{
public:
...
Widget& operator+=(const Widget& rhs)//这个协议适用于
//+=,-=,*=等等
{
...
return *this;
}
Widget& operator=(int rhs)//此函数也适用,即使
//此一操作符的参数类型
//不符合协议
{
...
return *this;
}
...
};
注意:
这只是个协议,并无强制性。若不遵循它,代码一样可通过编译。然而这份协议被所有内置类型和标准程序库提供的类型如string,vector,complex,tr1::shared_ptr共同遵守。因此除非你有一个标新立异的好理由,不然还是随众吧。