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

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

相关推荐
云深麋鹿1 天前
标准库中的String类
开发语言·c++·容器
愚者游世1 天前
力扣解决二进制 | 题型常用知识点梳理
c++·程序人生·算法·leetcode·职场和发展
蜡笔小马1 天前
15.Boost.Geometry 坐标系统详解
c++·boost
AD钙奶-lalala1 天前
Android编译C++代码步骤详解
android·开发语言·c++
rhett. li1 天前
FreeBSD系统中使用clang/clang++编译Skia源码的方法
c++·ui·用户界面
_风华ts1 天前
C++函数指针
c++·函数指针
威桑1 天前
解决 Qt6 程序 在Linux 环境下无法输入中文的问题
linux·c++·qt
浅念-1 天前
C++ :类和对象(4)
c语言·开发语言·c++·经验分享·笔记·学习·算法
shentuyu木木木(森)1 天前
栈与队列基础
c++··队列
yuuki2332331 天前
【C++】模拟实现 AVL树
java·c++·算法