EffectiveC 學習筆記02

2022-09-12 03:48:09 字數 1368 閱讀 7918

day 2 1.11

第一類是定義常量指標:

const

int *a ; //

常用這種

intconst *c; //

這兩種一樣,都是指標指向乙個const int 型別的變數;

int * const d=&b;//

這是const指標,指標的指向在必須初始化後就不可以改變

/所以,在替換時一般用cosnt指標指常量

const

int * const temp=「衣衫勝雪徐鳳年」;

第二類是class專屬常量:

為了將常量的作用域限制於class內,必須讓他成為乙個member,

而為了保證至多有乙個實體,要把他定義為static成員          

class

t

宣告不分配記憶體,定義分配記憶體

(extern宣告不是定義,也不分配儲存空間。事實上它只是說明變數定義在程式的其他地方)

在處理class專屬常量是static也是int時,需要特殊處理,

如果不取它的位址,你可以宣告並使用它們而無需提供定義式。

但是如果你要取它的位址或是編譯器並不認可這種行為,你需要在實現檔案中新增如下**:

const

i nt t::i; //

如果你的編譯器不支援以上語法,即不允許static成員在其宣告式中獲得初值,你可以將初值放在定義式內。

class

abc;

abc::i = 10;

//但是如果你的class在編譯期間需要乙個class常量值,例如編譯器需要知道ui陣列的大小。這時你可以使用enum來彌補。

class

abc;//

the enum hack 補償做法

intui[i];

};

認識enum的理由:

1.它更像define,所有編譯器都不允許它被獲得位址(而const差的編譯器可以獲得位址)

2.它是模板元程式設計的基礎技術

雖然define定義的類似函式可以避免呼叫函式帶來的額外開銷,但像下面這種巨集會有很多問題:

#define max_f(a,b) f((a)>(b)? (a):(b))

首先所有的實參都必須有小括號,但即使全加了小括號也有很多問題

而inline函式可以獲得巨集的效率而更可靠:

templateinline 

void max_f(const t& a, const t&b )

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 學習筆記

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