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

相关推荐
颖川守一1 小时前
C++c6-类和对象-封装-设计案例2-点和圆的关系
开发语言·c++
charlee442 小时前
将std容器的正向迭代器转换成反向迭代器
c++
arbboter2 小时前
【C++20】新特性探秘:提升现代C++开发效率的利器
c++·c++20·新特性·span·结构化绑定·初始化变量·模板参数推导
zc.ovo2 小时前
图论水题4
c++·算法·图论
眠りたいです3 小时前
Qt音频播放器项目实践:文件过滤、元数据提取与动态歌词显示实现
c++·qt·ui·音视频·媒体·qt5·mime
汤永红3 小时前
week2-[循环嵌套]数位和为m倍数的数
c++·算法·信睡奥赛
1白天的黑夜15 小时前
前缀和-560.和为k的子数组-力扣(LeetCode)
c++·leetcode·前缀和
No0d1es12 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
DjangoJason14 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
weixin_3077791316 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法