在第一次见到c语言中的字符串拷贝函数,不知道有没思考过一个问题,为什么这个函数需要返回一个char*?
当知道这个问题的答案后,就明白了原来是为了链式调用!
那么关于赋值操作,我们可以把它写成连锁形式:
int x,y,z;
x=y=z=10;//连锁形式
而且赋值采用右结合,所以上述赋值被解析为:
x=(y=(z=10));
那么为了实现这样的连锁赋值(链式调用),赋值操作符必须返回一个引用指向操作符的左实参。这是为class实现赋值操作符时应该遵循的一个规则:
public:
Test();
~Test();
Test& operator=(const Test& other)
{
...
return *this;//返回左侧对象
}
};
这个规则不仅适用于以上的标准赋值形式,也适用于所有赋值相关运算,例如:
public:
Test();
~Test();
Test& operator+=(const Test& other)//你也可以用于-=,*=等
{
...
return *this;//返回左侧对象
}
};
在编程中,我们经常会有这样的操作,需要注意的是这只是一个规则,并没有强制性,所以,你可以不使用,代码上来说是没有任何问题的。然而这个规则被所有的内置类型和标准程序库提供的类型如string,vector等共同遵守,还有在c语言中的很多函数,这样做的有点就是链式调用,所以还是应该遵守的。
总结:
令赋值操作符返回一个reference to *this。