Effective c++ 的一些中重要建议

1、对于单纯变量,最好以const对象或是enums 替换 #defines.

2、对于形似函数的宏(macros),最好改写成inline函数来替换 #defines.

3、将某些东西声明为const可以帮助编译器侦测出错误的用法。const可被加于任何作用域内的对象、函数参数、函数返回类型、函数成员体系。

4、编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。

5、当const和non-const 成员函数有着实质性的等价实现时,令non-const版本调用const版本可以避免代码重复。

6、为内置型对象进行手工初始化,因为C++不保证初始化它们。

7、构造函数最好使用成员初始列表(member initialization list),而不要在构造函数体内使用赋值操作(assignment)。初始列列出的成员变量,其排列次序应该和他们在Class 中声明的次序相同。

8、为避免“夸编译单元之初始化次序”问题,请以local static 对象替换non-local static 对象。

9、编译器可以暗自为class创建default 构造函数,copy构造函数、copy assignment 操作符,以及析构函数。

10、为了驳回编译器自动(暗自)提供的(构造函数。。。)的机能,可以将成员函数声明为private 并且不予实现,使用像Uncopyable 这样的base class 也是一种做法。

11、polymorphic(带多态性质的)base class应该声明一个virtual 析构函数。如果 class 带有任何virtual 函数,他就应该拥有一个virtual析构函数。

12、class 的设计的目的如果不是作为base classes 使用,或不是为了具备多态性(polymorphically),就不应该声明virtual 析构函数。

13、析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下他们(不传播)或是结束程序。

14、如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。

15、在构造和析构期间不要调用virtual 函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)。

posted on 2014-01-20 10:22  NewPanderKing  阅读(152)  评论(0)    收藏  举报

导航