effective C++笔记之条款15:让operator=返回*this的引用

l        缺省版本的operator=函数具有如下形式:

C&C::operator=(const C&);

l        返回值常犯的错误:返回void,妨碍了连续赋值操作;返回const对象的引用,使该语句不能通过(w1 = w2)= w3。

l        即使重载了赋值操作符,返回的也是类的对象的引用。如标准string类型提供了两个不同版本的赋值运算符,如下所示:

string&operator=(const string& rhs);

string&operator=(const char *rhs);

l        string& operator=(conststring& rhs);

但当声明为如下形式:

string&string::operator=(string& rhs);

调用它的应用程序不能通过编译。如下所示:

string x;

x = “hello”;

因为赋值语句的右边参数不是正确的类型-它是一个字符数组,不是一个string-编译器就要产生一个临时的string对象(通过string构造函数,条款19)使得函数继续运行。 也就是,编译器必须产生大致像下面这样的代码:

const string temp(“hello”);

x = temp;

编译器一般会产生这样的临时值(除非显示地定义了所需要的构造函数),但该临时值是一个const。它可以防止传递到函数内的临时值被修改。否则,程序员就会很奇怪 的发现,只有编译器产生的临时值可以修改而他们在函数调用时实际传进去的参数却不行。

l        当定义自己的赋值运算符时,必须返回赋值运算符左边参数的引用,*this。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值