1. 程式人生 > >C++ 之 強制轉換

C++ 之 強制轉換

        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);

*b = *b + 1;
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的轉換好