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