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

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

相关推荐
ceclar123几秒前
C++文件操作
开发语言·c++
CSDN_RTKLIB19 分钟前
【动态链接库】一、VS下基本制作与使用
c++
高一要励志成为佬20 分钟前
【C++】vector的迭代器失效问题,(什么是迭代器失效,为什么会产生迭代器失效,怎么避免迭代器失效问题)
开发语言·c++
落笔映浮华丶1 小时前
蓝桥杯零基础到获奖-第4章 C++ 变量和常量
java·c++·蓝桥杯
培林将军1 小时前
Visual Studio Code 之C/C++开发编译环境搭建
c语言·c++·vscode
@木辛梓2 小时前
指针,数组,变量
开发语言·c++·算法
yqsnjps74658ocz2 小时前
如何检查Visual Studio是否支持C++14?
c++·ide·visual studio
buvsvdp50059ac2 小时前
如何在Visual Studio中启用C++17或C++20?
c++·c++20·visual studio
yqsnjps74658ocz2 小时前
如何在Visual Studio中设置项目为C++14?
java·c++·visual studio
buvsvdp50059ac2 小时前
如何在Visual Studio中启用C++14的特性?
java·c++·visual studio