effective c++条款15学习总结
2011-02-14 09:24
204 查看
条款15: 让operator=返回*this的引用
operator=的返回值必须可以作为一个输入参数被函数自己接受。在一个类c中,缺省版本的operator=函数具有如下形式(见条款45):
c& c::operator=(const c&);
一般情况下几乎总要遵循operator=输入和返回的都是类对象的引用的原则,然而有时候需要重载operator=使它能够接受不同类型的参数。例如,标准string类型 提供了两个不同版本的赋值运算符:
string& // 将一个string
operator=(const string& rhs); // 赋给一个string
string& // 将一个char*
operator=(const char *rhs); // 赋给一个string
请注意,即使在重载时,返回类型也是类的对象的引用。
c++程序员经常犯的一个错误是让operator=返回void,这好象没什么不合理的,但它妨碍了连续(链式)赋值操作,所以不要这样做。
结论:当定义自己的赋值运算符时,必须返回赋值运算符左边参数的引用,*this。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。
operator=的返回值必须可以作为一个输入参数被函数自己接受。在一个类c中,缺省版本的operator=函数具有如下形式(见条款45):
c& c::operator=(const c&);
一般情况下几乎总要遵循operator=输入和返回的都是类对象的引用的原则,然而有时候需要重载operator=使它能够接受不同类型的参数。例如,标准string类型 提供了两个不同版本的赋值运算符:
string& // 将一个string
operator=(const string& rhs); // 赋给一个string
string& // 将一个char*
operator=(const char *rhs); // 赋给一个string
请注意,即使在重载时,返回类型也是类的对象的引用。
c++程序员经常犯的一个错误是让operator=返回void,这好象没什么不合理的,但它妨碍了连续(链式)赋值操作,所以不要这样做。
结论:当定义自己的赋值运算符时,必须返回赋值运算符左边参数的引用,*this。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。
相关文章推荐
- effective c++条款14学习总结
- effective c++条款12学习总结
- effective c++条款13学习总结
- effective c++条款13学习总结
- effective c++条款13学习总结
- effective c++条款11学习总结
- effective c++条款16学习总结
- effective c++条款17学习总结--在operator=中检查给自己赋值的情况
- Bootstrap学习总结笔记(15)-- 基本组件之进度条
- Maven学习总结(15)——Maven 项目中pom.xml详解
- Effective Modern C++ 条款15 尽可能使用constexpr
- More Effective C++ 条款15
- More Effective C++ 条款15 了解异常处理(exception handling)的成本
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
- effective stl 条款15 小心string实现的多样性
- EffectiveC++学习笔记-条款2
- Maven学习总结(15)——Maven 项目中pom.xml详解
- day_1_15 JavaWeb系列学习总结之JavaWeb实现分页查询
- Java基础学习总结(15)——java读取properties文件总结
- EffectiveC++学习笔记-条款48