C++中的四種強轉型別
阿新 • • 發佈:2019-01-30
在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