型別轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(type)expression,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非const物件的指標,把乙個指向基類物件的指標轉換成指向乙個派生類物件的指標,這兩種轉換之間的差別是巨大的,但是傳統的c語言風格的型別轉換沒有區分這些。還有乙個缺點就是,c風格的轉換不容易查詢,他由乙個括號加上乙個識別符號組成,而這樣的東西在c++程式裡一大堆。所以c++為了克服這些缺點,引進了4新的型別轉換操作符,他們是static_cast、const_cast、dynamic_cast、reinterpret_cast。
static_cast
最常用的型別轉換符,正常情況下的型別轉換,如把int轉換為float
int i =2;
float f;
f =(
float
) i;
//c風格
f =static_cast
<
float
>
(i);
//c++風格
const_cast
用於去除const屬性,把const型別的指標變成非const型別的指標
const
int constant =21;
const
int* const_p =
&constant;
int* modifier =
const_cast
<
int*
>
(const_p)
;*modifier =
7;
dynamic_cast
其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的。在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。
reinterpret_cast
interpret是解釋的意思,reinterpret即為重新解釋,此識別符號的意思即為資料的二進位制形式重新解釋,但是不改變其值。比較少用。
C 中4種型別轉換方式
首先型別轉換,比如以下 int i double d 12.0 i int d 但是這種強制轉換符對於類和類的指標來說,就比較麻煩,所以c 標準定義了四個新的轉換符 轉換乙個指標為其他型別的指標,也允許乙個指標轉換為整數型別,反之亦然 include using namespace std clas...
C 中4種 型別轉換 方式
dynamic cast var reinterpret cast var static cast var const cast var 1 執行時,檢查轉換 2 基類中一定要有虛函式 不能用於基礎型別 否則編譯不通過 3 成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null 更多請檢視...
比較C 中的4種型別轉換方式
ansi c 標準定義了四個新的轉換符 reinterpret cast static cast dynamic cast 和 const cast 目的在於控制類 class 之間的型別轉換。reinterpret cast expression dynamic cast expression s...