本文作为学习《Effective C++》的阅读笔记概览,希望通过学习写出高质量、高效率的代码
- 条款01:视C++为一个语言联邦
- 条款02:尽量以
const,enum,inline替换#define
- 对于单纯常量,最好以
const对象或enums替换#define - 对于形似函数的宏(macros),最好改用inline函数替换
#define
- 对于单纯常量,最好以
- 条款03:尽可能使用const
- 将某些东西声明为
const可帮助编译器侦测出错误用法,const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。 - 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)
- 当
const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复
- 将某些东西声明为
- 条款04:确定对象被使用前已先被初始化
- 为内置型对象进行手工初始化,因为C++不保证初始化他们
- 构造函数最好使用成员初值列(member initialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列列出的成员变量,其排列次序应该和他们在
class中声明次序相同 - 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。
- 条款05:了解C++默认编写并调用了哪些函数
- 编译器可以暗自为class创建
default构造函数、copy构造函数、copy assignment操作符,以及析构函数。
- 编译器可以暗自为class创建
- 条款06:若不想使用编译器自动生成的函数。就该明确拒绝
- 为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明private并且不予实现。使用像
Uncopyable这样的base class也是一种做法
- 为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明private并且不予实现。使用像
- 条款07:为多态基类声明
virtual
polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,他就应该拥有一个virtual析构函数classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphic),就不该声明为virtual函数
- 条款09:别让异常逃离析构函数
- 析构函数函数绝对不要吐出异常,如果一个析构函数调用的函数可能抛出异常。析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序
- 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作
本文总结了《Effective C++》中的关键建议,包括视C++为一个语言联邦、用const、enum和inline替代#define、确保对象初始化、理解默认函数行为及合理拒绝默认函数等内容。

2481

被折叠的 条评论
为什么被折叠?



