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可以函數易懂太多。
條款2總結
這些手段能降低#define的使用,但是不能完全做到。
3、儘可能使用const
太多細節待整理,暫時不寫。。。。
4、確定對象被使用前先已初始化
- 內置類型必須手動初始化,不然會有隨機數
- 非內置類型在構造函數中確保初始化
- 成員初值列比賦值更高效
- C++中類的成員初始化是有嚴格的順序的,以聲明的順序初始化
- 注意兩個文件中定義的兩個類的初始化順序,可能會帶來麻煩,但是用local static方法可以預防。