运算符重载的this指针问题

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指针,这不是多此一举吗?

5个回答

我举个例子吧,比如如果我们想实现这样的功能s1 = s2 = s3,就是把s3赋值给s2和s1.如果不返回*this指针,就不能实现这样的语法了.

等号赋值运算符函数必须返回*this

前人的经验是:赋值操作符与复合赋值操作符(+=、*=等)应返回左操作数的引用。
一方面可以使操作符可以连续使用;另一方面也可以减掉创建和撤销临时副本的开销。

string& operator =(string & str)
你的函数摆明了必须返回string&,从语法讲,你在重载函数内实现自己的深拷贝,但是编译器在编译的时候并不知道你这个函数里设置自身状态和赋值有什么关系。只有返回this才完全赋值操作。

为了满足连续赋值的情况,比如a=b=c

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐