day 2 1.11
第一類是定義常量指標:
constint *a ; //
常用這種
intconst *c; //
這兩種一樣,都是指標指向乙個const int 型別的變數;
int * const d=&b;//
這是const指標,指標的指向在必須初始化後就不可以改變
/所以,在替換時一般用cosnt指標指常量
const
int * const temp=「衣衫勝雪徐鳳年」;
第二類是class專屬常量:
為了將常量的作用域限制於class內,必須讓他成為乙個member,
而為了保證至多有乙個實體,要把他定義為static成員
classt
宣告不分配記憶體,定義分配記憶體
(extern宣告不是定義,也不分配儲存空間。事實上它只是說明變數定義在程式的其他地方)
在處理class專屬常量是static也是int時,需要特殊處理,
如果不取它的位址,你可以宣告並使用它們而無需提供定義式。
但是如果你要取它的位址或是編譯器並不認可這種行為,你需要在實現檔案中新增如下**:
consti 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函式可以獲得巨集的效率而更可靠:
templateinlinevoid 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 學習筆記
如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...