在c語言中,型別轉換只需要在變數前加上轉換的型別即可,而且轉換可以是雙向的,但是這種粗暴的型別對付基本型別還可以,對付複雜型別就力不從心了。因此c++提供了四種型別轉換操作符:static_cast、dynamic_cast、const_cast、reinterpret
(1)static_cast
static_cast可以完全代替c風格的型別轉換實現基本型別的轉換。此外可以將父類指標轉換為子類指標,也可以將子類指標轉換為父類指標,但是如果兩個類是不相關的,無法相互轉換。但是需要注意的是:如果父類指標指向的父類物件,此時將父類指標轉換為子類指標雖然可以通過static_cast實現,但是這種轉換可能是不安全的,如果父類指標本身指向乙個子類物件,則不存在安全問題。
(2)dynamic_cast
dynamic_cast只能用於物件指標之間的型別轉換,可以將父類指標轉換為子類指標,也可以將子類指標轉換為父類指標,此外轉換結果也可以是引用。與static_cast的區別是,dynamic_cast在將父類指標轉換為子類指標過程中,對背後的型別進行檢查保證型別完全匹配,但是static_cast不會這樣做。只有當乙個父類指標指向子類物件時,並且父類中包含虛函式時,使用dynamic_cast才會成功,否則返回null指標,如果是引用則丟擲異常。
(3)const_cast
const_cast可以在轉換的過程中增加或者刪除const屬性。一般無法將常量指標直接賦給普通指標,但是通過const_cast可以移除常量指標的const屬性,實現const指標到非const指標的轉換。
(4)reinterpret_cast
reinterprep_cast可以將一種型別的指標直接轉換為另一種型別的指標,不論兩個類之間是否有繼承關係。還可以將乙個指標轉換為乙個整數,也可以將乙個整數轉換為乙個指標。還可以用於不同函式指標之間的轉換。
C 型別轉換操作符 cast operator
dynamic cast 用以轉換多型型別 polymorphic type 建立執行時檢查將保證轉換的有效性。如果該轉換不是安全的,則丟擲乙個bad cast異常。static cast 用以轉換非多型型別。沒有執行時檢查。const cast 用以除去乙個物件的常態 constness 和易失態...
C 過載型別轉換操作符
在需要做資料型別轉換時,一般顯式的寫法是 cpp view plain copy font size 18px type1 i type2 d i type1 d 顯式的寫型別轉,把d從type2型別轉為type1型別 這種寫法不能做到無縫轉換,也就是直接寫 i d,而不需要顯式的寫 type1 來...
細說C 型別轉換操作符
c 語言雖然相容c,也支援c語言的型別轉換用法,就是將型別用圓括號括起來,這種轉換可視性比較差,難以跟蹤錯誤的轉換。c 提供了命名的強制轉換操作符,畢竟轉換有時是不安全的,所以使用命名轉換操作符可以根據所使用的轉換操作符可以判斷風險級別。下面我們就來看看c 提供的四種命名的強制轉換操作符的具體功能和...