C++ 之 強制轉換
阿新 • • 發佈:2019-05-10
C語言當中的強制轉換基本沒有任何的限制,只需要一個括號即可,而在C++中,對強制轉換有了一定的限制,這樣避免了我們在使用時造成的不明確問題,同時也增加了程式碼的可讀性。一共有四種,分別時static_cast、reinterpret_cast、const_cast、dynamic_cast。
1.static_cast轉換
可以實現相同型別之間的轉換,如:double b ;int a = static_cast<int>(b);
2.reinterpreter_cast 轉換
可以實現不同型別之間的轉換,如指標到整型
int* aas = new int[1] ;
aas[0] = 1;
int b = reinterpret_cast<int>(aas); ////b中的值為aas 指標的地址
3.const_cast 轉換
const_cast 中的型別必須時指標、引用或指向物件成員型別的指標
const int constA = 10;
const int *pConstA = &constA;
int* b = const_cast<int*>(pConstA);
printf("%d ,%d",constA,*b);/////10 11 可以發現constA中的值並沒有發生變化,因為constA是一個常量,若constA沒有const的修飾,最後的結果將是11 11
4.dynamic_cast 轉換
dynamic_cast實現的是多型類之間的的轉換
對於“向上轉換”(即派生類指標或引用型別轉換為其基類型別),無論是指標還是引用向上轉換都是安全地。
對於“向下轉型”有兩種情況:
另一種是基類指標所指物件為基類型別,在這種情況下dynamic_cast在執行時做檢查,轉換失敗,返回結果為0;
https://blog.csdn.net/u010275850/article/details/49452373 我覺得這篇部落格對於dynamic_cast的轉換好