C 的4種型別轉換方式

2021-10-24 02:24:36 字數 1269 閱讀 3910

型別轉換有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...