Effective C 經驗條款

2022-08-16 10:39:08 字數 1692 閱讀 1540

高效c++ --模板與泛型程式設計

在c++中模板體現的是編譯期多型,virtual體現的是執行期多型。

關於typename的雙重含義:

在宣告template引數時,不論使用keywordclass或typename,意義全然同樣。

可是c++並不總是把class和typename視為等價。

有時候必須使用typename。

template內出血的名稱假設依於某個template引數,稱之為從屬名稱。假設從屬名稱在class內呈巢狀狀,我們稱她為巢狀從屬名稱。

總而言之,在乙個模板中使用了還有乙個模板內的引數型別,就須要使用typename表明所使用的這個變數是屬於乙個模板中的型別。

不論什麼時候當你想要在template中值涉乙個巢狀從屬型別名稱,就必須在緊鄰他的前乙個位置放上keywordtypename

使用typename表示巢狀從屬型別名稱。但不得在base class list(基類列)或member initialization list(成員初值列)內以它作為baseclass修飾符。

在使用new申請記憶體時,假設記憶體空間不足。可能會有異常發生,可是能夠從外界設定異常發生時呼叫的函式。set_new_handler

區分介面繼承和實現繼承:

函式介面繼承和函式實現繼承。這兩種繼承的差異,非常像函式宣告與函式定義之間的差異。

有時候希望derived classes僅僅繼承成員函式的介面(也就是宣告);有時候你又會希望derived classes同一時候繼承函式的介面與實現。但又希望可以override他們所繼承的實現;又有時候你希望derived classes同一時候繼承函式的介面和實現。而且不同意override不論什麼東西。

事實上上面的三種情況分別相應三種情況,各自是純虛函式,虛函式,和基類的函式

宣告乙個pure virtual函式的目的是為了讓derived classes僅僅繼承函式介面。

宣告簡樸的impure virtual函式的目的。是讓derived classses繼承該函式的介面和預設實現。

宣告non-virtual函式的目的是為了令derived classes繼承函式的介面及乙份強制性實現。

模板特化的方法。對於模板的特化就像是又定義了乙個模板,只是這個模板的引數是已經規定好的,所以的template裡面就不須要定義typename。相當於模板的過載,僅僅只是這個模板的引數是已經規定好了的。

effective c++中提到過。使用const enum inline取代#define,這裡的意思是前面能夠替代後面。由於對於#define來說。將來替換的始終是文字。假設有錯或者使用#define不是非常恰當,可能在編譯的時候不會出錯可是在執行過程會出錯。假設是使用前者來搞定這些,他們假設有錯,在編譯的時候是能夠發現的。

眼下全部編譯器對於virtual function 的實現方法都是使用各個class專屬的virtual table。大小固定,而且在程式執行前就構造好了。

c++在布局以及訪問時間上基本的額外負擔是由virtual引起的。

virtual function機制:用以支援乙個有效率的「執行期繫結」

virtual base class用以實現「多次出如今繼承體系的base class 有乙個單一而被共享的實體」

這兩種機制分別相應子類中的vptr vbtr子類中有兩個指標。分別執行他們

另一些多重繼承下的額外負擔,發生在「乙個derived class和其第二或後繼之base class的轉換」之間。

Effective C 經驗條款

高效c 4 必須返回物件時,別妄想返回其reference 這句話什麼意思呢?就是在乙個函式內,如果你需要這個函式返回乙個新的物件,那麼這個函式的返回值型別就不要定義成引用型別。就直接返回這個類型別。首先,我們知道在函式傳遞引數時,傳遞引用的好處,尤其是對那麼比較大的型別,但是對於內建型別和stl的...

effective c 條款總結

條款1 盡量用const 和inline 而不用 define 條款2 盡量用而不用 條款3 盡量用new delete 而不用malloc free 條款4 盡量使用c 風格注釋 條款5 對應的new和delete 都要採用相同的形式 條款6 析構函式裡對指標成員呼叫delete條款 條款7 預先...

effective c 條款01 整理

書中將c 劃分為4個次語言,期望將混亂的c 體系進行簡單的梳理,只能說目的達到了,但這麼分合適不合適呢?不知道.1 c c without class 初級c 確實是對c的延生,這也涉及到c 是否應該嚴格相容c的問題,歷史問題不去評判,但這是事實。2 物件導向c object oriented c ...