effective C++笔记之条款15:让operator=返回*this的引用
2012-03-11 14:02
288 查看
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。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。
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。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。
相关文章推荐
- Effective c++学习笔记——条款10:令operator=返回一个*this的引用
- 条款15: 让operator=返回*this的引用
- Effective C++ 学习笔记:让operator=返回*this的引用
- Effective C++ 学习笔记:让operator=返回*this的引用
- Effective c++学习笔记——条款10:令operator=返回一个*this的引用
- 条款15:让operator=返回*this的引用
- effective C++笔记之条款31、32: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用、尽可能地推迟变量的定义
- Effective C++ 学习笔记:让operator=返回*this的引用
- effective C++笔记之条款23:必须返回一个对象时不要试图返回一个引用
- effective c++ 条款10 让operator= 返回*this的引用
- 条款十五: 让operator=返回*this的引用
- Effective C++——》条款10:令operator=返回一个reference to *this
- 读书笔记_Effective_C++_条款十:令operator=返回一个reference to *this
- 条款10:令operator=返回一个*this的引用
- 条款10:令operator= 返回一个reference to *this
- 条款10:令operator = 返回一个reference to *this
- 条款10 令operator=返回一个reference to *this
- 条款10:令operator=返回一个reference to *this
- 条款10:令operator=返回一个reference to * this(Have assignment operators return a reference to *this)
- 读书笔记《Effective c++》 条款10 令operator= 返回一个reference to *this