總 結
去const屬性用const_cast。
基本型別轉換用static_cast。
多型類之間的型別轉換用daynamic_cast。
不同型別的指標型別轉換用reinterpreter_cast。
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast;
注:頂層const:表示指標本身是個常量。如:int *const p;
底層const:表示指標所指的物件是乙個常量。如:int const *p;
該運算子只能改變運算物件的底層const。
[cpp] view plain
copy
#include
using namespace std;
int main()
注:此處只能用const_cast,而不能用static_cast;
通常為運算物件的位模式提供較低層次上的重新解釋。
注:1、在指標之間轉換,將乙個型別的指標轉換為另乙個型別的指標,無關型別;
2、將指標值轉換為乙個整型數,但不能用於非指標型別的轉換。
示例:[cpp] view plain
copy
#include
using namespace std;
int main()
輸出結果如下:
執行時型別識別(以區別以上三個均在編譯時識別),用於將基類的指標或引用安全地轉換成派生類的指標或引用。
對指標進行dynamic_cast,失敗返回null,成功返回正常cast後的物件指標;
對引用進行dynamic_cast,失敗丟擲乙個異常bad_cast,成功返回正常cast後的物件引用。
對於「向上轉換」(即派生類指標或引用型別轉換為其基類型別),無論是指標還是引用向上轉換都是安全地。
對於「向下轉型」有兩種情況:
一種是基類指標所指物件是派生類型別的,這種轉換是安全的;
另一種是基類指標所指物件為基類型別,在這種情況下dynamic_cast在執行時做檢查,轉換失敗,返回結果為0;
在引用上,dynamic_cast依舊是常用於「安全的向下轉型」。與指標一樣,引用的向下轉型也可以分為兩種情況,與指標不同的是,並不存在空引用,所以引用的dynamic_cast檢測失敗時會丟擲乙個bad_cast異常。
示例如下:
[cpp] view plain
copy
#include
using namespace std;
class base
; virtual void show()
};
class derived:public base
; void show()
};
int main()
//這是第二種情況
base * base1 = new base;
if(derived *der1 = dynamic_cast(base1))
else
delete(base);
delete(base1);
return 0;
}
執行結果如下:
C 四種強制型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種強制型別轉換
1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...
C 四種強制型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...