讀書筆記Effective C 04 個人向

2021-10-20 10:44:04 字數 1118 閱讀 9610

1.盡可能延後變數定義式的出現時間,一旦出現變數的宣告最好當場初始化(注意與賦值的區別),比如 string password("123456")。通過copy建構函式可以避免無意義的default構造行為。經常出現的乙個情況是,變數如果需要在迴圈中使用,那麼是應該定義在迴圈外然後每次複製,還是每次都在迴圈內部構造和析構呢?如果賦值的成本低於一組構造和析構,並且迴圈的次數很大時,在迴圈外定義大體上比較高效,否則應當使用在迴圈內定義。

2.強制型別轉換的新式方法,如static_cast這種,能夠比較清晰地辨識出來。在c++中,基類的指標base* 和它的派生類的指標derived*都可以指向乙個派生類物件object,可以使用base* temp=& object做乙個隱式轉換,但有時候這兩個指標的值並不一樣,會有乙個偏移量作用在derived*身上,用以取得正確的base* 指標。(當然這種情況可能根據編譯器的不同而出現差別)。

3.避免返回handles(引用、指標、迭代器)指向物件內部。一旦這種handle被傳出去了,就是在暴露「handles比物件更長壽」的風險。應當將dangling handles的可能性降到最低。

5.異常安全函式提供 以下三個保證:a、基本承諾:如果異常被丟擲,沒有任何物件或者資料會因此被破壞,所有物件都應該處於前後一致的狀態。b、強烈保證:如果異常被丟擲,程式的狀態不改變。即函式失敗以後,會恢復到呼叫函式之前的狀態。c、不拋擲保證:承諾不丟擲異常,因為他們總能幹完被期待的活兒。比如相比較於std::nothrow,直接new如果失敗要丟擲異常的,結果就是為了健壯性**裡到處都是try。所以用new(nothrow)然後再判斷是否為null就可以了。

6.使用inline能夠免除函式呼叫成本,然而inline只是對編譯器的乙個申請,不是強制命令。inline函式一般位於標頭檔案內,因為大多數編譯器都是在編譯器來做inline。

7.將檔案間的編譯依存關係降至最低,否則連串編譯會對許多專案造成難以形容的災難。使用宣告的依存性替代定義的依存性。這正是編譯依存最小化的本質,現實中讓標頭檔案盡可能自我滿足,萬一做不到就與其他檔案中的宣告式(而非定義式)相依存:

如果能使用乙個reference/pointer就可以完成任務,就不要使用object,因為一旦用到object,就需要用到它的定義式了;如果能使用乙個class的宣告式,就不要使用定義式;為宣告式和定義式提供不同的標頭檔案。

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