总结:
1.这个条款的主要内容就是想告诉你在赋值运算符重载的时候返回一个指向对象的引用(reference to *this),但是注意这知识个协议,意味着大家都去遵守这个协议,并不是说一定要你写成返回对象的引用。
为什么要写成成返回对象的引用呢?下面我来解释一下。
一般情况的赋值我们可以写出如下形式
int x, y, z;
形式1:x = y;
形式2:x = y = z;
形式3:x = (y = (z = 15));
形式1和形式2是连锁赋值。像这种连锁赋值的情况。赋值运算符必须返回一个指向引用指向操作符左侧的实参。所以要求你返回指向对象的引用例如
stu& operator=(const stu& s)
下面看一个例子:
class stu
{
public:
int _x;
public:
stu(int x) :_x(x){};
stu& operator=(const stu& s)
{
_x = s._x;
return *this;
}
};
int main()
{
stu s(1);
stu s2(2);
stu s3(3);
s = s2= s3;
return 0;
}
可以实现连锁赋值。
当然这个返回指一个指向对象的引用的协议不仅仅适用=,他还适用于+=,-=,*=等等之类的方法。