Effective C++
改善程序与设计的55个具体做法(第三版)
条款01:视C++为一个语言联邦
View C++ as a federation of languages.
四个次语言:
C、Object-Oriented C++、Template C++、STL。
条款02:尽量以const,enum,inline替换#define
Prefer consts, enums, and inlines to #defines.
对于单纯常量,最好以const对象或enum替换#define。
对于形似函数的宏,最好改用inline函数替换#define。
条款03:尽可能使用const
Use const whenever possible.
将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”。
当const和non-const成员函数有着实质等价的是实现时,令non-const版本调用const版本可避免代码重复。
条款04:确定对象被使用之前以先被初始化
Make sure that objects are initialized before they're used.
为内置类型进行手工初始化,因为C++不保证初始化它们。
构造函数最好使用成员初始化列表(member initialization list),而不要在构造函数体内使用赋值操作。
为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。
条款05:了解C++默默编写并调用哪些函数
Know what functions C++ silently writes and calls.
编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。
条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
Explicitly disallow the use of compiler-generated functions you do not want.
为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。
条款07:为多态基类声明virtual析构函数
Declare destructors virtual in polumorphic base classes.
带多态性质的base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。
classes的设计目的如果不是作为base classes使用,或不是为了具备多态性,就不该声明virtual析构函数。
条款08:别让异常逃离析构函数
Prevent exception from leaving destruction.
析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们或结束程序。
如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。
1548

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



