class String{
public:
string& operator =(string & str)
{
len =str.len;
…;
return *this;
}
…
private:
…
}
int main ( )
{
string s1("123"),s2;
s2=s1;
return0;
}
老师说s1=s2等价于s1.operator=(s2),那么operator函数里面已经对s1的私有数据成员赋值了,为什么还要返回this指针,这不是多此一举吗?
等号赋值运算符函数必须返回*this
我举个例子吧,比如如果我们想实现这样的功能s1 = s2 = s3,就是把s3赋值给s2和s1.如果不返回*this指针,就不能实现这样的语法了.
前人的经验是:赋值操作符与复合赋值操作符(+=、*=等)应返回左操作数的引用。
一方面可以使操作符可以连续使用;另一方面也可以减掉创建和撤销临时副本的开销。
string& operator =(string & str)
你的函数摆明了必须返回string&,从语法讲,你在重载函数内实现自己的深拷贝,但是编译器在编译的时候并不知道你这个函数里设置自身状态和赋值有什么关系。只有返回this才完全赋值操作。
为了满足连续赋值的情况,比如a=b=c