C 的四種轉型操作

2021-09-10 14:42:06 字數 1835 閱讀 3269

舊式轉型的語法結構是由一對小括號加上乙個物件名稱組成

(type) expression
缺點在於:

為解決c舊式轉型的缺點,c++匯入了4個新的轉型操作符:static_cast、const_cast、dynamic_cast、reinterpret_cast。

下面分別介紹:

static_cast: 基本與擁有與c舊式轉型相同的威力與意義,以及相同的限制。

int a=

10,b=15;

double c =

double

(a)/ b;

//舊式的轉型操作

double d =

static_cast

<

double

>

(a)/ b;

//新式的轉型操作

const_cast: 用來改變表示式中的常量性(constness)或易變性(volatileness)

int a;

const

int* pa =

&a;int

* pa1 = pa;

//error:cannot convert from 'const int*' to 'int*'

int* pa2 =

(int

*)pa;

//舊式的轉型操作

int* pa3 =

const_cast

<

int*

>

(pa)

;

dynamic_cast: 運用於繼承體系中「安全的向下轉型或跨系轉型動作」。

你能夠利用dynamic_cast。將」指向base class objects的pointers或references「轉型為」指向derived(或sibling base)class objects的pointers或references「,並得知轉型是否成功。

假設轉型失敗,會以乙個null指標(當轉型物件是指標)或乙個exception(當轉型物件是reference)表現出來。

class

cbase

;class

dbase

:public cbase

;dbase db;

dbase* pdb=

&db;

cbase* pcb=

dynamic_cast

>

(pdb)

;cbase& rcb=

dynamic_cast

>

(db)

;

reinterpret_cast: 最常用的用途是轉換"函式指標"型別,實際結果取決於編譯器。

typedef

void

(*funcptr)

(void);

//funcptr是乙個指向返回值為空引數為空型別的函式指標

intifunc()

//ifunc是乙個返回值為整數引數為空的函式

void

func

(funcptr f)

//func是乙個返回值為空引數為funcptr函式指標的函式

int main (

)

參考**

c++轉型操作符

c++中的四種轉型操作符

C 的四種轉型小結

static cast應該是適用範圍最廣的,適用於很多隱式轉換,基類指標與子類指標的相互轉換,或者新增const屬性,去掉const屬性應該用const cast double a 10.23 int b static cast a base ptr new child child ptr2 sta...

C 四種cast操作符

t expression 或 t expression 函式風格 function style 兩種形式之間沒有本質上的不同。對於具有轉換的簡單型別而言 c 風格轉型工作得很好。然而,這樣的轉換符也能不分皂白地應用於類 class 和類的指標。ansi c 標準定義了四個新的轉換符 reinterp...

C 四種強制型別轉換操作

1 reinterpret cast reinterpret cast 轉換乙個指標為其它型別的指標,也允許從乙個指標轉換為整數型別,反之亦然。這個操作符能夠在非相關的型別之間轉換。操作結果只是簡單的從乙個指標到別的指標的值的二進位制拷貝。在型別之間指向的內容不做任何型別的檢查和轉換。reinter...