Effective C++ 讀書筆記(1-4條款)和理解

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

  1. const定義的變量可以進入符號表,方便調試
  2. const定義的常量可以限制作用域,也就是class裏。

enum替換#define

不太理解這麼做的好處

inline替換#define

用#define定義宏是看起來非常噁心的事情,理解起來很頭疼,MFC裏大量用到了宏,簡直就是奇技淫巧。但如果用inline來實現,結合template可以函數易懂太多。

條款2總結

這些手段能降低#define的使用,但是不能完全做到。

3、儘可能使用const

太多細節待整理,暫時不寫。。。。

4、確定對象被使用前先已初始化

  1. 內置類型必須手動初始化,不然會有隨機數
  2. 非內置類型在構造函數中確保初始化
  3. 成員初值列比賦值更高效
  4. C++中類的成員初始化是有嚴格的順序的,以聲明的順序初始化
  5. 注意兩個文件中定義的兩個類的初始化順序,可能會帶來麻煩,但是用local static方法可以預防。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章