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

编程入门 行业动态 更新时间:2024-10-11 05:27:26

读书笔记:Effective C++ 2.0 版,<a href=https://www.elefans.com/category/jswz/34/1761563.html style=条款26(歧义)、条款27(禁止部分隐式生成的函数)"/>

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

条款26: 当心潜在的歧义
即使cpp支持潜在二义性/歧义,也不要使用。

void f(int);
void f(char);
double d = 6.02;
f(d); //需要明确转换

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

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++编译器自动生成,需要明确禁止生成。

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

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

更多推荐

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

本文发布于:2023-12-04 06:35:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660043.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:条款   歧义   函数   读书笔记   隐式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!