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

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

相关推荐
Lenyiin2 小时前
《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
c++·正则表达式·lenyiin
yxc_inspire4 小时前
基于Qt的app开发第十三天
c++·qt·app·tcp·面向对象
虾球xz4 小时前
CppCon 2015 学习:Concurrency TS Editor’s Report
开发语言·c++·学习
潇-xiao4 小时前
Qt 按钮类控件(Push Button 与 Radio Button)(1)
c++·qt
板鸭〈小号〉4 小时前
命名管道实现本地通信
开发语言·c++
YKPG6 小时前
C++学习-入门到精通【14】标准库算法
c++·学习·算法
zm6 小时前
极限复习c++
开发语言·c++
程序猿本员7 小时前
线程池精华
c++·后端
靡樊7 小时前
Socket编程UDP\TCP
网络·c++·学习·tcp/ip·udp
byte轻骑兵7 小时前
【C++高级主题】命令空间(五):类、命名空间和作用域
开发语言·c++