##1、视C++为一个语言联邦
C++是一门从C语言发展演化而来的语言,而且还在演化中,越来越智能和强大,相应地就增加了学习的成本和代价。C++具有多种编程范式:面向过程(C语言风格)、面向对象(核心特征)、函数式编程(不了解)、泛型(略了解、强大)和元编程(一点不了解)。所以这是一门奇葩而杂揉的语言,要啥有啥,所以没有一个人敢轻易地说自己精通C++。
标题说C++是一个联邦,那它有哪些邦呢?
- C语言
- 面向对象的C++
- Template
- STL
记住:每一部分的语言和编程风格都不一样。
第一条款的目的是要告诉我们C++的总体结构,让大家心里有谱。
##2、尽量以const、enum、inlin替换#define
学过C语言的我们都对#define很熟悉,它用来定义常量和宏很有用处的,但是转到了C++,作者想告诉我们#define能不用就不用,要设法取而代之,在代码中要尽量少看到#define。
###const替换#define
- const定义的变量可以进入符号表,方便调试
- const定义的常量可以限制作用域,也就是class里。
###enum替换#define
不太理解这么做的好处
###inline替换#define
用#define定义宏是看起来非常恶心的事情,理解起来很头疼,MFC里大量用到了宏,简直就是奇技淫巧。但如果用inline来实现,结合template可以让函数易懂太多。inline函数和宏有类似之处,都是用预定义好的代码替换掉函数功能调用的地方,但是替换时机不同,宏是在预编译阶段替换,而inline是编译时替换的。inline函数可以调试,可以节省时间和空间的,因为不需要进行栈的保存、返回等工作。
##条款2总结
这些手段能降低#define的使用,但是不能完全做到。
##3、尽可能使用const
太多细节待整理,暂时不写。。。。
##4、确定对象被使用前先已初始化
- 内置类型必须手动初始化,不然会有随机数
- 非内置类型在构造函数中确保初始化
- 成员初值列比赋值更高效
- C++中类的成员初始化是有严格的顺序的,以声明的顺序初始化
- 注意两个文件中定义的两个类的初始化顺序,可能会带来麻烦,但是用local static方法可以预防。