您的位置:首页 > 编程语言 > C语言/C++

Effective C++ 学习记录

2015-07-24 09:02 381 查看
1.以by value 传递用户自定义类型通常是个坏主意,Pass-by-reference-to-const往往是比较好的选择

一、让自己习惯C++

条款02:尽量以const,enum,inline替换#define

(1)对于单纯常量,最好以const对象或enums替换#defines。

示例:

#define ASPECT_BATIO 1.653

改为

const double AspectRatio 1.653;

好处:作为一个语言常量,AspectRatio 会被编译,会进入记号表内。使用常量可能比使用#define导致较小量的目标码。

(2)对于形似函数的宏(macros),最好改用inline函数替换#defines

示例:

#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))

改为:

template <typename T>

inline void callWithMax(const T&a,const T& b)

{

f(a>b ? a:b);

}

好处:更加可预料,更加类型安全

条款03:尽可能使用const

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

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

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

条款04:确定对象被使用前已先被初始化

C++成员初始化次序:base classes 更早于其derived classes 被初始化,而class的成员变量总是以其声明次序被初始化。

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

(2) 构造函数最好使用成员初值列(member initialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列

列出的成员变量,其排列次序应该和它们在class中的声明次序相同。

(3) 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static 对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++