读书笔记:Effective C++ 2.0 版,条款26(歧义)、条款27(禁止部分隐式生成的函数)

条款26: 当心潜在的歧义

即使cpp支持潜在二义性/歧义,也不要使用。

c 复制代码
void f(int);
void f(char);
double d = 6.02;
f(d); //需要明确转换

多继承充满了潜在二义性/歧义的可能。

c 复制代码
class Base1 {public: int doIt();};
class Base2 {public: void doIt();};
class Derived: public Base1,public Base2 {...};
Derived d;
d.doIt();		// 错误!------二义
d.Base1::doIt();	// 正确, 调用Base1::doIt
d.Base2::doIt();	// 正确, 调用Base2::doIt

改变一个类成员的访问权限不应该改变程序的含义。

条款27: 如果不想使用隐式生成的函数就要显式地禁止它

operator=函数会被C++编译器自动生成,需要明确禁止生成。

c 复制代码
template<class T>
class Array {
private: 
  Array& operator=(const Array& rhs); // 不要定义这个函数!
  Array& operator=(const Array& rhs)=delete;//新版cpp语法支持 
  ...
};

赋值和拷贝构造函数具有行为上的相似性.

相关推荐
D_evil__34 分钟前
【Effective Modern C++】第七章 并发API:35. 优先考虑基于任务的编程而非基于线程的编程
c++
hansang_IR41 分钟前
【记录】AT_abc406模拟赛
c++·算法·模拟赛
消失的旧时光-19432 小时前
C++ 多线程与并发系统取向(七)—— 并发排障与工程纪律(从“会写”到“能控场”)
开发语言·c++·并发
小老鼠不吃猫3 小时前
深入浅出(十三)QWT库——高稳定二维绘图
c++·qt·二维图
无忧.芙桃3 小时前
AVL树的实现
数据结构·c++
遥望九龙湖3 小时前
打包动态库
开发语言·c++·visualstudio
tankeven3 小时前
HJ101 排序
c++·算法
不想看见4043 小时前
01 Matrix 基本动态规划:二维--力扣101算法题解笔记
c++·算法·leetcode
麻瓜pro4 小时前
【迭代】高性能c++实时对话系统e2e_voice
开发语言·c++·onnxruntime·端到端语音
特种加菲猫4 小时前
深入理解string:通过模拟实现探讨其内部机制
c++