舊式轉型的語法結構是由一對小括號加上乙個物件名稱組成
(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...