=================================================================
最近再一次重读Effective这本书,发现——C++真是太复杂了,要真正搞懂C++里面的东西真的需要你一两年的工业编程经验,在学校里面的编程大部分不能真正体会到C++的威力,看过Primer这本书也有两次,可是要是不读Effective这本书,真的不会体会到C++的复杂性,当然,也是真的,Primer这本书是一本非常好的书,2012年我在燕大买了这本书,在燕大的图书馆里陆陆续续地看完了第一遍,一个印象:这绝不会是一本好的入门书籍,但是它是一本好的随身词典。第二遍是这学期看的,收获也是很大,我想将来还必须一遍一遍地再看下去啊。
——2014/4/28 Pm. 机电实验大楼A 6楼
=================================================================
IT男的双十一就只能去买书。买了本《Effective C++》,决定近期和《算法导论》一起看。
这两天看了几个,记录下来供以后复习使用。
条款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 inline to #defines)
这个条款可以理解为“以编译器替换预处理器”,因为#define不被视为语言的一部分。
- 对于单纯常量,最好以const对象或enums替换#define
- 对于形似函数的宏(macros),最好改用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++不保证初始化它们
- 构造函数最好使用成员初始列,而不要在构造函数本体内使用赋值操作。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同
- 为免除“跨编译单元之初始化次序”问题,请以local static 对象替换non-local static 对象
2013/12/9 PS:今天开始继续看,就是这些条条框框太容易忘了。现在只能先走第一遍了。
条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls )
条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated functions you do not want)
条款07:为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes)