读书笔记:Effective C++ 2.0 版,条款15、16、17(operator=返回*this、全赋值、检查this)

条款15: 让operator=返回*this的引用

c++的设计者bjarne stroustrup想使用户自定义类型尽可能地和固定类型的工作方式相似。所以有重载运算符,类型转换函数、拷贝赋值、拷贝构造函数等。

类c中,缺省版本的operator=函数具有如下形式:

c 复制代码
c& c::operator=(const c&);

注意返回值没有const修饰,虽然可以加,但与缺省形式不一致,并不推荐。

c 复制代码
string&	operator=(const char *rhs);  
这个是为了兼容char*,避免多余的隐式转换,成本变大

条款16: 在operator=中对所有数据成员赋值

这条需要注意派生类赋值时,也带上基类赋值。

c 复制代码
class derived: public base {
public:
  derived(const derived& rhs): base(rhs), y(rhs.y) {}
};

条款17: 在operator=中检查给自己赋值的情况

c 复制代码
c& c::operator=(const c& rhs){
  // 检查对自己赋值的情况
  if (*this == rhs)// 假设operator=存在
    return *this;
  ...
}
也可以考虑用uuid标识唯一对象。

这几个条款都是范式,按照std标准形式即可。

相关推荐
Jackilina_Stone1 小时前
【faiss】用于高效相似性搜索和聚类的C++库 | 源码详解与编译安装
android·linux·c++·编译·faiss
喜欢吃燃面1 小时前
C++:list(1)list的使用
开发语言·c++·学习
神仙别闹2 小时前
基于QT(C++)实现(图形界面)选课管理系统
java·c++·qt
NicolasCage3 小时前
C语言指针Pointers
c++·后端
「QT(C++)开发工程师」3 小时前
Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)
c++·qt·c#·visual studio
weixin_537590454 小时前
【任务6.13】计算肇事汽车号码
c++·算法·汽车
两颗泡腾片4 小时前
黑马程序员C++核心编程笔记--类和对象--运算符重载
c++·笔记
用户686916134904 小时前
1999年NOIP普及组旅行家的预算(洛谷P1016):贪心算法实战指南
c++
程序员编程指南5 小时前
Qt 与 WebService 交互开发
c语言·开发语言·c++·qt·交互
溟洵5 小时前
Qt 窗口 工具栏QToolBar、状态栏StatusBar
开发语言·前端·数据库·c++·后端·qt