c 中的4種型別轉化方式詳細解析

2022-10-04 04:30:14 字數 1994 閱讀 8687

具體歸納如下:

(1)reinterpret_cast

該函式將一程式設計客棧個型別的指標轉換為另乙個型別的指標.

這種轉換不用修改指標變數值存放格式(不改變指標變數值),只需在編譯時重新解釋指標的型別就可做到.

reinterpret_cast 可以將指標值轉換為乙個整型數,但不能用於非指標型別的轉換.

例://基本型別指標的型別轉換

double d=9.2;

double* pd = &d;

int *pi = reinterpret_cast(pd);  //相當於int *pi = (int*)pd;

//不相關的類的指標的型別轉換

class a{};

class b{};

a* pa = new a;

b* pb = reinterpret_cast(pa);   //相當於b* pb = (b*)pa;

//指標轉換為整數

long l = reinterpret_cast(pi);   //相當於long l = (long)pi;

(2)const_cast

該函式用於去除指標變數的常量屬性,將它轉換為乙個對應指標型別的普通變數。反過來,也可以將乙個非常量的指標變數轉換為乙個常指標變數。

這種轉換是在編譯期間做出的型別更改。

例:const int* pci = 0;

int* pk = const_cast(pci);  //相當於int* pk = (int*)pci;

const a* pca = new a;

a* pa = const_cast(pca);     //相當於a* pa = (a*)pca;

出於安全性考慮,const_cast無法將非指標的常量轉換為普通變數。

(3)static_cast

該函式主要用於基本型別之間和具有繼承關係的型別之間的轉換。

這種轉換一般會更改變數的內部表示方式,因此,static_cast應用www.cppcns.com於指標型別轉換沒有太大意義。

例://基本型別轉換

int i=0;

double d = static_cast(i);  //相當於 double d = (double)i;

//轉換繼承類的物件為基類物件

class base{};

class derived : public base{};

derived d;

base b = static_cast(d);     /xoqkilrdf/相當於 base b = (base)d;

(4)dynamic_casxoqkilrdft

它與static_cast相對,是動態轉換。

這種轉換是在執行時進行轉換分析的,並非在編譯時進行,明顯區別於上面三個型別轉換操作。

該函式只能在繼承類物件的指標之間或引用之間進行型別轉換。進行轉換時,會根據當前執行時型別資訊,判斷型別物件之間的轉換是否合法。dynamic_cast的指標轉換失敗,可通過是否為null檢測,引用轉換失敗則丟擲乙個bad_cast異常。

例:class base{};

cwww.cppcns.comlass derived : public base{};

//派生類指標轉換為基類指標

derived *pd = new derived;

base *pb = dynamic_cast(pd);

if (!pb)

cout << "型別轉換失敗" << endl;

//沒有繼承關係,但被轉換類有虛函式

class a(virtual ~a();)   //有虛函式

class b{}:

a* pa = new a;

b* pb  = dynamic_cast(pa);

如果對無繼承關係或者沒有虛函式的物件指標進行轉換、基本型別指標轉換以及基類指標轉換為派生類指標,都不能通過編譯。

本文標題: c++中的4種型別轉化方式詳細解析

本文位址:

C 中4種型別轉換方式

首先型別轉換,比如以下 int i double d 12.0 i int d 但是這種強制轉換符對於類和類的指標來說,就比較麻煩,所以c 標準定義了四個新的轉換符 轉換乙個指標為其他型別的指標,也允許乙個指標轉換為整數型別,反之亦然 include using namespace std clas...

C 中4種 型別轉換 方式

dynamic cast var reinterpret cast var static cast var const cast var 1 執行時,檢查轉換 2 基類中一定要有虛函式 不能用於基礎型別 否則編譯不通過 3 成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null 更多請檢視...

C 的4種型別轉換方式

型別轉換有c風格的,當然還有c 風格的。c風格的轉換的格式很簡單 type expression,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非const物件的指標,把乙個指向基類物件的指標轉換成...