effectivecpp學習筆記

2021-07-16 15:25:12 字數 2353 閱讀 9825

c++可視為乙個語言聯邦,主要由以下四部分組成:c、object-oriented c++、template c++、 stl

盡量以const、enum、inline替代#define

寧可用編譯器替換預處理器,如下所示:

const

double aspectratio = 1.653;

const

char* const authorname = "scott meyers";

//static and const

//只有static const且為整型才能在類宣告的時候初始化,也可以在類外初始化

//static非const變數必須在類外初始化

//const 非static變數必須在建構函式初始化列表中初始化

//非static非const必須在建構函式或者建構函式初始化列表中初始化

class

gameplayer

};//static常量定義,位於實現檔案內

int gamepalyer::num = 5;

const

double gameplayer::fudgefactor = 1.35

enum 定義和使用如下:

enum

weekday

;weekday myday = sunday;

enum 更像#define而不是 const, 可以取 const 變數的位址而不可以取enum變數的位址

盡可能使用 const

a.const 出現在星號左邊,表示指標指向的是常量,const出現在星號右邊表示指標本身是常量,如下所示:

const

int * num = 5;

intconst * num = 5;//non-const pointer,const data

int * const num = 5;//const pointer, non-const data

b.const返回值返回乙個常量值,可以避免對返回值的修改,降低因客戶錯誤而造成的意外。

const可以被施加於任用作用域內的物件、函式引數、函式返回值型別以及成員函式本身。

const成員函式:

c.形式為宣告時在函式後面加上const,類外定義的時候也需要在後面加上const,如下所示:

class text;

int text::func() const

d. const物件只能呼叫const成員函式,而非const物件既可以呼叫const成員函式,也可以呼叫non-const成員函式

e.const成員函式不可以更改類內任何non-static成員變數,但是如果成員變數是個指標,則可以在 const函式內改變指標所指內容的大小

f.non-const成員函式可以呼叫const成員函式,反之不可以

g.在成員變數前面加mutable關鍵字,則const成員函式裡面可以修改該成員變數的值

確定物件使用之前已經初始化

a.對於無任何成員的內建型別,必須手工初始化。對於其他型別,初始化由建構函式實現,此時確保每乙個建構函式都將物件的每乙個成員初始化

b.在建構函式裡面對成員變數進行賦值是賦值,而不是初始化,在建構函式初始化列表中才是初始化。

前者首先呼叫每個成員變數的預設建構函式,然後對他們賦予新值。後者直接對每個成員變數進行複製構造,效率要高

c.一般來說建議總是使用建構函式初始化列表,如果存在很多的成員變數的話,可以將其中「賦值和初始化表現得一樣好的」成員變數移到建構函式中(一般是內建型別)

d.初始化順序:基類早於繼承類,而成員變數的初始化順序取決於宣告的次序而不是初始化列表中的順序

e.static物件,是指壽命從構造出來直到程式結束為止的物件,包括global物件、定義域namespace作用域中的物件、在類內(或函式內、檔案作用域內)被宣告為static的物件。其中在函式中的static物件為local static物件,其餘的為non-local static物件。

f.定義於不同編譯單元的non-local static物件初始化順序不確定,如果乙個編譯單元中的non-static物件的初始化用到另乙個單元的non-local static物件,則會出問題,解決方法是使用單例模式,即利用函式返回乙個static型別的引用,因為c++保證函式內的local static物件會在該函式被呼叫期間首次遇到該物件時被初始化

g.引用別的模組的函式:標頭檔案宣告,原始檔實現,其他模組使用時,直接包含該標頭檔案,注意該函式不能是static的。

effectivecpp學習筆記

c 可視為乙個語言聯邦,主要由以下四部分組成 c object oriented c template c stl 盡量以const enum inline替代 define,寧可用編譯器替換預處理器,如下所示 const double aspectratio 1.653 const char co...

Effective cpp 讀書筆記1

本週內,每天更新。c 的特性主要 四個大方面 四個次語言 結論 壞處用const取代 用enum取代 用inline取代 結論 注意 const成員函式 bitwise constness 編譯器就是這種 和logical constness 在const和non const成員函式中避免重複 結論...

Effective cpp 讀書筆記2

c 默默編寫的函式 程式設計師沒有宣告的前提下 default建構函式 copy建構函式 copy assignment操作符 default析構函式 非virtual 編譯器產出的函式都是public的 關於建構函式,如果使用者定義了至少一種,就不會有預設建構函式 結論 自行宣告和定義 將對應的函...