1. 程式人生 > >C++中的四種強轉型別

C++中的四種強轉型別

在C++中一共有四種強轉型別分別為:static_cast,const_cast,reinterpret_cast和dynamic_cast

型別轉換的一般形式為:cast-name<type>(expression)

頂層const:表示指標本身是個常量    eg:int *const p;

底層const::表示指標所指的物件是一個常量   eg:int const *p

1.static_cast

只要不包括底層const,任何具有明確定義的型別轉換都可以用。

2.const_cast

只能改變底層的const。

3.reinterpret_cast

a.在指標之間轉換,將一種型別的指標轉換為另一種型別的指標

b.將指標轉換為一個整形數,但不能用於非指標型別的轉換

4.dynamic_cast

將基類的指標或引用轉換為派生類的指標或引用(我們稱從已定義類產生新類的過程稱為派生。已存在的用來派生新類的類為基類,又稱父類。由已存在的類派生出的新類稱為派生類,又稱為子類。例如:從哺乳動物派生出狗,哺乳動物是父類,狗是子類。

對指標進行dynamic_cast :失敗返回null,成功返回正常cast後的物件指標

對引用進行dynamic_cast : 失敗丟擲一個異常的bad_cast,成功返回正常cast後的物件指標

對於向上轉換(從派生類轉換到基類),無論是指標還是引用都是安全的

對於向下轉換型別:

a.基類指標所指物件是派生類型別,這種轉換是安全的

b.基類指標所指物件為基類型別,在這種情況下,dynamic_cast在執行時做檢查,轉換失敗,返回結果為0