读书笔记: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语法支持 
  ...
};

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

相关推荐
爱吃生蚝的于勒4 分钟前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim
wanderist.12 分钟前
C++输入输出的一些问题
开发语言·c++·图论
金色熊族13 分钟前
MV结构下设置Qt表格的代理(2)
c++·qt
Morwit37 分钟前
Qt qml创建c++类的单例对象
开发语言·c++·qt
June`37 分钟前
IO模型全解析:从阻塞到异步(高并发的reactor模型)
linux·服务器·网络·c++
YxVoyager43 分钟前
Qt C++ :QRegularExpression 正则表达式使用详解
c++·qt·正则表达式
闻缺陷则喜何志丹1 小时前
【回文 字符串】3677 统计二进制回文数字的数目|2223
c++·算法·字符串·力扣·回文
李余博睿(新疆)1 小时前
c++分治算法
c++
oioihoii1 小时前
Protocol Buffers 编码原理深度解析
c++
消失的旧时光-19431 小时前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c