Effective C 55條款速記版(下)

2021-08-20 17:27:00 字數 1129 閱讀 5582

每種轉型的作用如下: 

1.const_cast通常被用來將物件的

常量特性轉除(cast away the constness)。它也是唯一由此能力的c++-style轉型操作符。 

2.dynamic_cast主要用來執行「安全向下轉型」(safe downcasting),也就是用來決定某物件是否歸屬繼承體系中的某個型別。它是唯一無法由舊式語法執行的動作,也是唯一

可能耗費重大執行成本的轉型動作(後面細講)。 

3.reinterpret_cast意圖執行低階轉型,實際動作(結果)可能 取決於編譯器,這表明其

不可移植。例如將pointer to int轉為int,這類轉型常用在低階**。例如,討論討論如何針對原始記憶體(raw memory)寫乙個除錯用的分配器(debugging allocator),見條款50. 

4.static_cast執行強迫隱式轉換(implicit conversions)。例如將int轉為double,non-const轉為const等。它也可以用來執行一些轉換的反向轉換,如將void*指標轉為typed指標,將pointer-to-base轉為pointer-to-derived。但無法將const轉為non-const,這個只有const_cast才能辦到。

class base

;class derived: public base

;derived d;

int x;

d.mf1();//呼叫drived::mf1();

d.mf1(x);//呼叫base中的mf1(int)。

d.mf2();//呼叫drived::mf2();

d.mf3();//呼叫drived::mf3();

d.mf3(x);//呼叫base中的mf3(int)。

d.mf4();//呼叫base::mf4();

5、我們要始終記得new和delete的對立,new的處理方式和delete的處理方式要交相呼應。

void base::operator delete(void rawmemory, std::size_t size) throw()

歸還rawmemory所指記憶體;

return ;

}

《Effective C 》 條款44 條款45

templates可以節省時間和避免 重複。對於類似的classes或functions,可以寫乙個class template或function template,讓編譯器來做剩餘的事。這樣做,有時候會導致 膨脹 code bloat 其二進位製碼帶著重複 或幾乎重複 的 資料,或者兩者。但這時候...

effective C 55個具體做法

2.盡可能使用const enum inline替換 define 編譯器替換預處理器 條款02 記住 2.1.對於單純常量,最好以const物件或者enum替換 defines.2.2.對於形似的函式的巨集,最好改用inline函式替換 defines.3.盡可能使用const,如果關鍵字cons...

Effective C 筆記(3) 條款4分析

這是乙個比較好理解的條款,從剛學習c語言開始,這樣的問題就一直伴隨至今。對於int double這樣的內建型別,需要手動初始化,比如說 int x 0 const char text a c style string double d cin d 以輸入流的方式初始化未初始化變數的錯誤,已經很少犯了...