读书笔记: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标准形式即可。

相关推荐
No0d1es5 分钟前
CCF GESP C++编程 五级认证真题 2025年3月
开发语言·c++·青少年编程·gesp·ccf·五级·2025年3月
shuaixio11 分钟前
【C++代码整洁之道】第九章 设计模式和习惯用法
c++·设计模式·设计原则·常见设计模式·习惯用法
the_nov1 小时前
25.Reactor
linux·c++
神里流~霜灭2 小时前
数据结构:二叉树(三)·(重点)
c语言·数据结构·c++·算法·二叉树·红黑树·完全二叉树
小王努力学编程2 小时前
【Linux系统编程】进程概念,进程状态
linux·运维·服务器·c++
2401_853448232 小时前
C嘎嘎类里面的额函数
c语言·开发语言·c++
莫有杯子的龙潭峡谷2 小时前
4.4 代码随想录第三十五天打卡
c++·算法
luckyme_3 小时前
leetcode 代码随想录 数组-区间和
c++·算法·leetcode
wen__xvn3 小时前
每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++
c++·职场和发展·蓝桥杯
熬夜苦读学习3 小时前
Linux进程信号
linux·c++·算法