【读书笔记】Effective C++(01)让自己习惯C++
作者:LogM
1. 让自己习惯C++
1.1 条款01:视C++为语言联邦
1.2 条款02:尽量以const, enum, inline替换 #define
1.2.1 #define用于常量的场景
缺点:
- a. #define定义的常量导致编译出错时,出错提示不友好;
- b. #define无视作用域(scope),无封装性。
解决:
- a. 大多数情况可以用const替换;
- b. 旧编译器对类内static const语法较苛刻,此时可用enum替换#define。
1.2.2 #define用于宏(函数)的场景
缺点:
- a. 需要注意括号的使用,给自己添麻烦;
- b. #define无视作用域(scope),无封装性。
- 解决:使用inline函数。
1.3 条款03:尽可能使用const
- 原因:让编译器辅助对常量/常量函数的错误使用。
1.3.1 const常量
const char* p = ...; // p可改变,*p不可改变 char const * p = ...; // 同上,有些人会这么写 char* const p = ...; // p不可改变,*p可改变 const char* const p = ...; // p不可改变,*p不可改变 const std::vector<int>::iterator iter = ...; // iter不可改变,*iter可改变 std::vector<int>::const_iterator iter = ...; // iter可改变,*iter不可改变 const Rational operator* (const Rational& lhs, const Rational& rhs); // 用于避免出现 (a * b) = c 这样的代码
1.3.2 const函数
bool func(int a, int b) const; // const表示该函数不改变类中的成员变量,mutable修饰的成员变量除外
1.4 条款04:对象使用前先初始化
- 内置变量类型在声明时初始化;
- 用户创建的类在构造函数用初始化列表初始化(注意:初始化顺序为成员变量的声明顺序有关,与初始化列表如何排列无关);
- 不同编译单元的non-local static对象的初始化顺序不确定,尽量使用local static对象代替。
相关推荐
往后余生 2020-09-17
CXsilent 2020-09-16
webgm 2020-08-16
Lophole 2020-06-28
sqliang 2020-06-14
xcguoyu 2020-06-13
徐建岗网络管理 2020-06-11
前端开发Kingcean 2020-06-11
cbao 2020-06-10
yezitoo 2020-06-06
bigname 2020-06-04
前端开发Kingcean 2020-05-29
xiaofanguan 2020-05-29
ELEMENTS爱乐小超 2020-05-28
皖林 2020-05-11
wbczyh 2020-05-03
zuihaobushi 2020-04-30