1、const_cast 去除常性
const int* ==》int *
double int *==》int*
2、static_cast (安全性更高)
3、reinterpret_cast (類似c的轉換)主要用於指標轉換
4、dynamic_cast(用於rtti)
rtti:執行時型別資訊(run_time type information)
(1)其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。
(2)不能用於內建的基本資料型別的強制轉換。
(3)dynamic_cast轉換,如果成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null。
(4)使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。
需要檢測有虛函式的原因:類中存在虛函式,就說明它有想要讓基類指標或引用指向派生類物件的情況,此時轉換才有意義。
這是由於執行時型別檢查需要執行時型別資訊,而這個資訊儲存在類的虛函式表中,只有定義了虛函式的類才有虛函式表。
(5) 在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的。在進行下行轉換時,dynamic_cast具有型別檢查的功能,比 static_cast更安全。向上轉換即為指向子類物件的向下轉換,即將父類指標轉化子類指標。向下轉換的成功與否還與將要轉換的型別有關,即要轉換的指標指向的物件的實際型別與轉換以後的物件型別一定要相同,否則轉換失敗。
#include#includeusing namespace std;
class a
else
delete(a);
return 0;
}
C 的四種型別轉換
在c 中,提供了四種型別轉換,static cast dynamic cast reinterp cast const cast。當然,如果你要用 強轉也行,c 是相容c的。static cast type id expression 常常用於下面幾種情況 一 用於類層次結構中基類和子類之間指標或引...
C 的四種型別轉換
c 中,四個與型別轉換相關的關鍵字 static cast const cast reinterpret cast dynamic cast 特點 靜態轉換,在編譯處理期間。應用場合 主要用於c 中內建的基本資料型別之間的轉換,如把int轉換為char,但是沒有執行時型別的檢測來保證轉換的安全性。上...
C 的四種型別轉換
c 強制型別轉換 static cast reinterpret cast const cast dynamic cast 1.static cast static cast用於非多型型別的轉換 靜態轉換 編譯器隱式執行的任何型別轉換都可用static cast,但它不能用於兩個不相關的型別進行轉換...