《effective c 》讀書筆記4

2021-06-23 08:22:41 字數 2194 閱讀 4233

條款41:了解隱式介面和編譯期多型

n  classes和templates都支援介面和多型

n  對classes而言介面是顯式的,以函式簽名為中心,多型則是通過虛函式發生於執行期。

n  對templates引數而言,介面是隱式的,奠基於有效表示式,多型則是通過template具現化和函式過載解析發生於編譯器。

條款42:了解typename的雙重意義

n  宣告模板引數,字首關鍵字class和typename可互換。

n  請使用關鍵字typename標識巢狀從屬型別名稱,但不得在基類或者成員初值列內以它作為基類修飾符。

條款43:學習處理模板化基類內的名稱

模板也可以作為基類被繼承,派生類的成員函式如果想訪問基類的函式版本,可以使用三種方法:第一是在基類函式呼叫之前加上this->,第二是使用using 宣告,第三個做法是,明白指出被呼叫的函式位於基類內。

條款44:將與引數無關的**抽離模板

條款45:運用成員函式模板接受所有相容型別

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

n  當我們編寫乙個類模板,而它所提供之與此模板相關的函式支援所有引數之隱式型別轉換,請將那些函式定義為類模板內部的友元函式。

條款47:使用traits類表現型別資訊

n  traits類使得型別相關資訊在編譯器可用,它們以模板和模板特化完成實現

n  整合過載技術後,traits類有可能在編譯期對型別執行if…else…測試

條款48:模板元程式設計

n  模板元程式設計可將工作有執行期移往編譯期,因而得以實現早期錯誤偵測和更高的執行效率。

條款49:了解new-handler行為

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

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

替換operator new和operator delete的三個最常見的理由:

用來檢測運用上的錯誤;

為了強化效能;

為了收集使用上的統計資料;

條款51:編寫new和delete時需要固守常規

n  operator new應該內含乙個無窮迴圈,並在其中嘗試分配記憶體,如果它無法滿足記憶體需求,就該呼叫new-handler,它也應該有能力處理0位元組的申請。class專屬版本則還應該處理比正確大小更大的申請。

n  operator delete應該在收到null指標時不做任何事。class專屬版本還應該處理比正確大小更大的錯誤申請。

條款52:寫了placement new也要寫placement delete

當你寫乙個placement new,請確定也寫出了對應的placement operator delete如果沒有這樣做,程式可能會發生隱微而時斷時續的記憶體洩露。

當你宣告placement new和placement delete,請確定不要無意識地遮掩了它們的正常版本。

條款53:不要輕忽編譯器的警告

n  嚴肅對待編譯器發出的警告資訊,努力在你的編譯器的最高警告級別下爭取無任何警告的榮譽。

n  不要過度依賴編譯器的報警能力,因為不同的編譯器對待事物的態度並不相同,一旦移植到另外乙個編譯器上,你原本依賴的警告資訊有可能消失。

條款54:讓自己熟悉包括tr1在內的標準程式庫

n  c++標準程式庫的主要機能由stl、iostream、locales組成,幷包含c99標準程式庫。

n  tr1新增了智慧型指標、一般化函式指標,hash_based容器,正規表示式,以及另外的10個元件的支援。

n  tr1自身只是乙份規範,為獲得tr1提供的好處,需要乙份實物,乙個好的實物**是boost

條款55:讓自己熟悉boost

boost是乙個社群,也是乙個**,致力於免費、原始碼開放、同僚複審的c++程式庫開發。boost在c++標準化過程中扮演深具影響力的角色。

boost提供許多tr1元件實現品,以及其他許多程式庫。

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