1. 程式人生 > >C++四種類型轉換

C++四種類型轉換

bin ++ 信息 {} pre 使用 屬性 四種 const

轉載: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++四種類型轉換