Effective C 讀書筆記02

2021-06-27 13:30:38 字數 1332 閱讀 9025

保持習慣,繼續寫部落格。

條款04:確定物件被使用前已被初始化

c++未初始化的值會導致不明確的行為。

c++初始化採用成員初值列的做法比較高效。

class abentry 

abentry::abentry()

:thename(),

theaddress(),

thephones(),

numtimesconsulted(0)

{}

成員初始化次序:base classes 更早於其derived classes 被初始化,而class 的成員變數總是以其宣告次序被初始化。所以改變成員初值列的順序也不會改變其初始化的次序。

跨編譯單元之初始化次序的問題:如果有至少2個原始碼檔案,可以採用local static 來代替non-local static 物件

不可以的**:

class filesystem ;

extern filesystem tfs; //預備給客戶使用的物件,tfs 代表「the file system」

class directory;

directory::directory(params)

directory temdir(params); //為臨時檔案而做出的目錄

這樣可能在temdir 初始化的時候tfs還未初始化。

local static做法:

class filesystem; 		 //同前

filesystem& tfs() //這個函式用來替換tfs物件,它在filesystem class 中可能是個staitc

class directory; //同前

directory::directory(params) //同前,但原本的reference to tfs 現在改為tfs()

directory &tempdir() //這個函式用來替換tempdir物件

請記住:

為內建型物件進行手工初始化,因為c++不保證初始化它們。

建構函式最好使用成員初值列,而不要在建構函式本體內使用賦值操作。初值列列出的成員變數,其排序次序應該和它們在class 中的宣告次序相同。

為免除「跨編譯單元之初始化次序」問題,請以local static 物件替換 non-local static 物件。

《effective C 》讀書筆記

1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...

Effective C 讀書筆記

一 讓自己習慣c 1 條款01 視c 為聯邦語言 c 的組成可分為四部分 1.c c 仍然以c語言為基礎。區塊 語句 預處理 內建資料型別 陣列 指標等都來自c。2.object oriented c c with classes所訴說的 classes 包括構造和析構 封裝 繼承 多型 virtu...

讀書筆記 Effective C

部分條款過於深奧,部分條款已了然於心,僅記錄當下所識所學 對於常量巨集定義,最好用const代替 define 對於函式巨集定義,最好用inline代替 define include ifdef ifndef仍被需要 內建物件記得手動初始化 使用成員初始列替換賦值操作 以local static替換...