Effective C 讀書筆記(46 50)

2022-03-19 11:07:44 字數 1846 閱讀 2222

條款四十六:需要型別轉換時請為模板定義非成員函式

條款四十七:請使用traits classes 表現型別資訊

1.整合過載技術後,traits classes 有可能在編譯期對型別執行if...else測試。

2.stl共有五種迭代器分類

1)input迭代器只能向前移動一次一步,客戶只可讀取(不能塗寫)它們所指的東西,而且只能讀取一次。(模仿指向輸入檔案的閱讀指標)

2)output迭代器一切只為輸出,它們只向前移動,一次一步,客戶只可塗寫它們所指的東西,而且只能塗寫一次。

3)forward迭代器,可以做input和output所能做的每一件事,而且可以讀或寫其所指物一次以上。

4)bidirectional迭代器比forward更強大,除了可以向前移動還可以向後移動。set.multiset,map,multimap的迭代器都屬於這種。

5)random access迭代器,可以執行迭代器算術。也就是可以在常量的時間內向前或向後跳躍任意距離。(類似於指標算術)vector,deque和string提供的迭代器都是這一分類。

3.迭代器型別的繼承關係圖如下:

條款四十八:認識template元程式設計

1.template metaprogramming(tmp,模板元程式設計)是編寫template-based c++程式並執行於編譯期的過程。

2.tmp有兩個偉大的效力:第一,它讓某些事情更容易。第二,由於template metaprograms執行於c++編譯期,因此可將工作從執行期轉移到編譯期。

3.tmp已被證明是個「圖靈完全」機器。意思好似他的威力大到足以計算任何事物。使用tmp你可以宣告變數、執行迴圈、編寫及呼叫函式。。。但這般構件相對於「正常的」c++對應物看起來很是不同。

4.tmp的起手程式是在編譯期計算階乘。示範如何通過「遞迴模板具現化」實現迴圈,以及如何在tmp中建立和使用變數:

templatestruct

factorial;};

template

<>

struct

factorial;};

intmain()

5.使用tmp的優勢:

1)確保度量單位正確。

2)優化矩陣運算。

3)可以生成客戶定製之設計模式。

6.template mataprogramming可將工作由執行期移往編譯期,因而得以實現早期錯誤偵測的執行效率。

條款四十九:了解new-handler的行為

1.設計良好的new-handle函式必須做以下事情:

1)讓更多記憶體可被使用。

2)安裝另乙個new-handle。

3)卸除new-handle。

4)丟擲bad-alloc(或派生自bad_alloc)的異常。

5)不返回,通常呼叫abort或exit。

2.set_new_handle允許客戶指定乙個函式,在記憶體分配無法獲得滿足時被呼叫。

條款五十:了解new和delete的合理替換時機

1.主要了解何時可在「全域性性的」或「class專屬的」基礎上合理替換預設的new和delete。

1)為了檢測執行錯誤。

2)為了收集動態分配記憶體之使用統計資訊。

3)為了增加分配和歸還的速度。

4)為了降低預設記憶體管理器帶來的空間額外開銷。

5)為了彌補預設分配器中的非最佳齊位。

6)為了將相關物件成簇集中。

7)為了獲得非傳統的行為。

2.有許多理由需要寫個自定義的new和delete,包括改善效能、對heap運用錯誤進行除錯、收集heap使用資訊。

《effective c 》讀書筆記4

條款41 了解隱式介面和編譯期多型 n classes和templates都支援介面和多型 n 對classes而言介面是顯式的,以函式簽名為中心,多型則是通過虛函式發生於執行期。n 對templates引數而言,介面是隱式的,奠基於有效表示式,多型則是通過template具現化和函式過載解析發生於...

《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...