《effective C 》讀書筆記

2021-07-22 02:48:43 字數 1218 閱讀 3094

1,c++關鍵字explicit:c++中, 乙個引數的

建構函式

(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個

構造器,2 是個預設且隱含的型別轉換操作符

。所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候

編譯器就自動呼叫這個構造器, 建立乙個aaa的物件

。很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程式設計師)的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫/使用, 不能作為型別轉換操作符被隱含的使用。

2,const成員函式:

const物件只能呼叫const成員函式。

const物件的值不能被修改,在const成員函式中修改const物件資料成員的值是語法錯誤;

在const函式中呼叫非const成員函式是語法錯誤。

3,子類繼承父類,子類裡面有成員物件的時候,建構函式的呼叫順序是這樣的:先呼叫父類的建構函式(若父類裡有成員物件,則先呼叫成員物件的建構函式),再呼叫子類成員物件的建構函式,在呼叫子類的建構函式。析構函式順序相反。

4,inline這個名稱就可以反映出它的工作方式,函式會在它所呼叫的位置上展開。這麼做可以消除函式呼叫和返回所帶來的開銷(暫存器儲存和恢復),而且,由於編譯器會把呼叫函式的**和函式本身放在一起優化,所以也有進一步優化**的可能。不過這麼做是有代價的,**會變長,這就意味著占用更多的記憶體空間或者占用更多的指令快取。核心開發者通常把那些對時間要求比較高,而本身長度又比較短的函式定義成內聯函式。如果你把乙個大塊頭的程式做成了內聯函式,卻不需要爭分奪秒,反而反覆呼叫它,這麼做就失去了內聯的意義了。

總結:對於簡短的函式並且呼叫次數比較多的情況,適合使用內聯函式。

使用方法:定義乙個內聯函式的時候,需要使用static作為關鍵字,並且用inline限定它(沒試過,暫且留在這裡)。比如:

static inline void dog(unsigned long tail_size);

內聯函式必須在使用前就定義好,否則編譯器就沒法把這個函式展開。實踐中一般在標頭檔案中定義內聯函式。由於使用了static作為關鍵字進行限制,所以在編譯時不會為內聯函式單獨建乙個函式體(這裡不太明白)。如果乙個內聯函式僅僅在某個原始檔中使用,那麼也可以把它定義在該檔案開始的地方。

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替換...

Effective C 讀書筆記

h class cpp const int num include include malloc,free new,delete new x,delete x.new x 100 delete x void x set new handler x 設定new記憶體不足時的響應函式 set new h...