《Effective C 》讀書筆記 設計與宣告

2021-08-20 22:40:16 字數 773 閱讀 5865

在c++介面設計中,乙個基本的原則是:讓介面容易被正確使用,不容易被誤用。接下來的所有討論都基於這一基本原則。

寧以引用方式(pass-by-reference-to-const)替換傳值方式(pass-by-value)

當使用傳值方式時,實際上傳遞的是物件的乙個副本,這樣會呼叫其建構函式和析構函式,增加了開銷,而引用方式實際上傳遞的是物件的位址,沒有任何建構函式或析構函式被呼叫,而將引用宣告為const,是因為不這樣做會擔心呼叫物件會改變被呼叫物件的值。

同時,以引用方式傳遞引數也可以避免slicing(物件切割)問題。所謂物件切割,是指當乙個派生類物件以傳值方式傳遞並被視為乙個基類物件,基類的拷貝建構函式會被呼叫,造成此物件的派生類特質全部被切割,僅留下基類物件。簡單點來說就是引數是基類,而當你將乙個派生類物件以傳值方式傳入時,傳遞到函式內的那個副本是乙個基類物件而不是派生類物件。解決此問題的方法便是以pass-by-reference-to-const的方式傳遞它。

但是記住,這些規則不適用於內建型別,以及stl的迭代器和函式物件,對他們用pass-by-value比較適當。

必須返回物件時,不要返回其reference

絕不要返回指標或者引用指向乙個區域性棧物件,或返回引用指向乙個堆物件,或返回指標或引用指向乙個區域性靜態物件而有可能同時需要多個這樣的物件。

為了使我們的物件有良好的封裝,我們應該盡量以非成員函式非友元函式替換成員函式,並且如果你需要對某個函式的所有引數(包括this指標所指的)進行型別轉換,那麼這個函式必須是非成員函式。

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