C primer C 四種強制型別轉換

2022-09-01 16:18:20 字數 1460 閱讀 6114

四種強制型別轉換:static_cast    const_cast    dynamic_cast     reinterpret_cast

1、static_cast

編譯器隱式執行的任何型別轉換都可以由static_cast顯示完成。

①用於類層次結構中基類和子類之間指標或引用的轉換。 進行上行轉換(把子類的指標或引用轉換成基類表示)是安全的; 進行下行轉換(把基類指標或引用轉換成子類表示)時,由於沒有動態型別檢查,所以是不安全的。 ②用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。 ③把空指標轉換成目標型別的空指標。 ④把任何型別的表示式轉換成void型別。

2、const_cast:將轉換掉表示式的const性質。

常量指標被轉化成非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;

常量物件被轉換成非常量物件。

3、dynamic_cast:將基類型別物件的引用或指標轉換為同一繼承層次中其它型別的引用或指標。與dynamic_cast一起使用的指標必須是有效的——必須為0或者指向乙個物件。

dynamic_cast操作符一次執行兩個操作,它首先驗證請求的轉換是否有效,只有轉換有效,操作符才實際進行轉換。

(1)其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。

(2)不能用於內建的基本資料型別的強制轉換。

(3)dynamic_cast轉換如果成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null。

(4)使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

b中需要檢測有虛函式的原因:類中存在虛函式,就說明它有想要讓基類指標或引用指向派生類物件的情況,此時轉換才有意義。 

這是由於執行時型別檢查需要執行時型別資訊,而這個資訊儲存在類的虛函式表中,只有定義了虛函式的類才有虛函式表。

(5)在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的 效果是一樣的。在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。向上轉換即為指向子類物件的向下轉換,即將父類指標轉化子類指標。向下轉換的成功與否還與將要轉換的型別有關,即要轉換的 指標指向的物件的實際型別與轉換以後的物件型別一定要相同,否則轉換失敗。

4、reinterpret_cast:

用法:reinterpret_cast(expression)

type-id必須是乙個指標、引用、算術型別、函式指標或者成員指標。

它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,在把該整數轉換成原型別的指標,還可以得到原先的指標值)。

總結:去const屬性用const_cast。基本型別轉換用static_cast。多型類之間的型別轉換用daynamic_cast。不同型別的指標型別轉換用reinterpreter_cast。

四種強制型別轉換

強制型別轉換時有一定風險的,例如把整形轉成指標,基類指標轉成派生類指標,常量指標轉成非常量指標等。c語言中的強制型別轉換 type cast 有顯式和隱式兩種,顯式一般就是直接用小括號強制轉換。沒有從形式上體現出轉換功能和風險的不同。低風險的型別轉換,沒有執行時型別檢查來保證轉換的安全性。1 用於類...

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...

C 四種強制型別轉換

1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...