C++的四種類型轉換
阿新 • • 發佈:2019-01-09
C++中,四個與型別轉換相關的關鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast
一、 static_cast
特點:靜態轉換,在編譯處理期間。
應用場合:主要用於C++中內建的基本資料型別之間的轉換,如把int轉換為char,但是沒有執行時型別的檢測來保證轉換的安全性。
上行轉換(派生類---->基類)是安全的;
下行轉換(基類---->派生類)由於沒有動態型別檢查,所以是不安全的。
二、dynamic_cast
使用場景:只有在派生類之間轉換時才使用dynamic_cast;不能用於內建的基本資料型別的強制轉換
在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;對於下行轉換,dynamic_cast是安全的(當型別不一致時,轉換過來的是空指標),而static_cast是不安全的(當型別不一致時,轉換過來的是錯誤意義的指標,可能造成踩記憶體,非法訪問等各種問題)
三、const_cast
使用場景:
a、常量指標轉換為非常量指標,並且仍然指向原來的物件
b、常量引用被轉換為非常量引用,並且仍然指向原來的物件
四、reinterpret_cast
使用場景:
它可以轉化任何內建的資料型別為其他任何的資料型別,也可以轉化任何指標型別為其他的型別。它甚至可以轉化內建的資料型別為指標,無須考慮型別安全或者常量的情形。不到萬不得已絕對不用。