C++四種類型轉換
轉載:http://blog.csdn.net/bian_qing_quan11/article/details/70788312
1、 static_cast:
功能:完成編譯器認可的隱式類型轉換。
格式type1 a;
type2 b = staic_cast<type1>(a);將type1的類型轉化為type2的類型;
使用範圍:
(1)基本數據類型之間的轉換,如int->double;
int a = 6;
double b = static_cast<int>(a);
(2)派生體系中向上轉型:將派生類指針或引用轉化為基類指針或引用(向上轉型);
class base{ …. }
class derived : public base{ …. }
base *b;
derived *d = new derived();
b = static_cast<base *>(d);
2、 dynamic_cast
功能:執行派生類指針或引用與基類指針或引用之間的轉換。
格式:
(1) 其他三種都是編譯時完成的,dynamic_cast是運行時處理的,運行時要進行運行時類型檢查;
(2) 基類中要有虛函數,因為運行時類型檢查的類型信息在虛函數表中,有虛函數才會有虛函數表;
(3) 可以實現向上轉型和向下轉型,前提是必須使用public或protected繼承;
例子:
向上轉型:
class base{ … };
class derived : public base{ … };
int main()
{
base *pb;
derived *pd = new derived();
pb = dynamic_cast<base *>(pd);
return 0;
}
向下轉型:
class base{ virtualvoid func(){} };
class derived : public base{ void func(){} };
int main()
{
base *pb = new base();
derived *pd = dynamic_cast<derived *>(pb);//向下轉型
return 0;
}
3、const_cast:
只能對指針或者引用去除或者添加const屬性,對於變量直接類型不能使用const_cast;不能用於不同類型之間的轉換,只能改變同種類型的const屬性。
如:
const int a= 0;
int b = const_cast<int>(a);//不對的
const int *pi = &a;
int * pii = const_cast<int *>pi;//去除指針中的常量性,也可以添加指針的常量性;
const_cast的用法:
(1)常用於函數的形參是一個非const的引用,我想要穿進去一個const的引用,可以使用const_cast<Type&>para;去除實參的常量性,以便函數能夠接受這個參數。
(2)一個const對象,我們想要調用該對象中的非const函數,可以使用const_cast去除對象的常量性;
4、reinterpret_cast:
從字面意思理解是一個“重新解釋的類型轉換”。也就是說對任意兩個類型之間的變量我們都可以個使用reinterpret_cast在他們之間相互轉換,無視類型信息。
不常使用。
C++四種類型轉換