Effective C 學習筆記 第一彈 1 4

2021-05-27 10:20:38 字數 1376 閱讀 1213

條款1 盡量以const和inline取代#define

1、當這麼做時 #define pi 3.1415

pi 在編譯之前會被預處理器移走,而並沒有進去符號表,當除錯時,你能看到3.1415,但是找不到pi。

2、常量指標

如 const int *p;

int a=1;

int b=2;

p = &a;

*p = 3; //error 常量指標指向的內容不能被修改

p =&b; //ok 常量指標指向的位址可以被修改

3、指標常量

如 

int * const  p = null;

int a = 1;

int b = 2;

p = &a;

p = &b; //error p不能被修改 指向的位址不能被修改

*p = b;//ok 內容可以被修改

4、指向常量的常量指標

如 const int * const p = null;

既不能修改指向 也不能修改內容

5、當需要定義乙個class專屬常量 可以這麼做

/*----------------.h---------------------*/

class gameplay

private:

//static const int num;           error:只是定義,在宣告之前不能使用,必須先初始化

static const int num = 4;  //static:因為所有物件公用num   const防止num被修改

int scores[num];

/*----------------.cpp--------------------*/

const int gameplay::num = 4;  //假如在.h檔案未使用 可以在.cpp檔案中初始化

當編譯器不允許類內初始化時 可以改用列舉型別

如class gameplay

private:

enum ;

int score[num];

6、用inline代替巨集命令

較小的程式推薦用內聯函式,但是否真的內聯是由編譯器決定的。

條款2 用代替

不解釋條款3 盡量以new和delete取代malloc和free

後者只是分配和釋放記憶體,對建構函式和析構函式一無所知,其中沒有任何物件被初始化

更不要混合使用

條款4 盡量使用c++風格的注釋形式

也就是用//倆槓 代替 /**/槓星星槓 因為後者在巢狀的時候會出現意外

Effective C 學習筆記

學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...

Effective C 學習筆記

1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...

effective c 學習筆記

如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...