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

相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·2 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码2 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
此生决int2 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++