免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
C++中類型轉(zhuǎn)換

C++中四種類型轉(zhuǎn)換運(yùn)算符的使用方法。

reinterpret_cast,dynamic_cast,const_cast,static_cast都是函數(shù)。

1、reinterpret_cast

reinterpret_cast<指針int */引用int &/void */其他變量類型int>

1)該函數(shù)將一個類型的指針轉(zhuǎn)換為另一個類型的指針。這種轉(zhuǎn)換不用修改指針變量值存放格式(不改變指針變量值),只需在編譯時重新解釋指針的類型就可做到.

//基本類型指針的類型轉(zhuǎn)換

double d=9.2;

double* pd = &d;

int *pi = reinterpret_cast<int*>(pd);  //相當(dāng)于int *pi = (int*)pd;

//不相關(guān)的類的指針的類型轉(zhuǎn)換

class A{};

class B{};

A* pa = new A;

B* pb = reinterpret_cast<B*>(pa);   //相當(dāng)于B* pb = (B*)pa;

2reinterpret_cast 可以將指針值轉(zhuǎn)換為一個整型數(shù),但不能用于非指針類型的轉(zhuǎn)換。

//指針轉(zhuǎn)換為整數(shù)

long l = reinterpret_cast<long>(pi);   //相當(dāng)于long l = (long)pi;

3)但是reinterpret_cast只能用于指針轉(zhuǎn)換,即最后的括號中的變量只能是指針才行。像下面的代碼在編譯時將通不過。

double f2 = 12.36;

int of = reinterpret_cast<int>(f2);//因為f2不是指針,而是double類型的普通變量。

 

2、const_cast

1)該函數(shù)用于去除指針變量的常量屬性,將它轉(zhuǎn)換為一個對應(yīng)指針類型的普通變量。反過來,也可以將一個非常量的指針變量轉(zhuǎn)換為一個常指針變量。

這種轉(zhuǎn)換是在編譯期間做出的類型更改。

int a = 10;

const int* pci = &a;

int* pk = const_cast<int*>(pci);  //相當(dāng)于int* pk = (int*)pci;

//*pci = 100;此時是會出現(xiàn)編譯錯誤的,因為pci被定義為指向常量的指針,因//此不能通過它來修改指向變量的值

*pk = 100;  //此時是正確的,即a的值被修改為100。即便前面a的定義被修改//const int a = 10,a同樣被修改。

 

const A* pca = new A;

A* pa = const_cast<A*>(pca);     //相當(dāng)于A* pa = (A*)pca;

(2) 出于安全性考慮,const_cast無法將非指針的常量轉(zhuǎn)換為普通變量。即括號中的變量只能是指針變量,且< >中的寫的必須是某種類型變量的指針,即int *, double *等等。像下面的代碼是錯誤的。

const int b = 200;

int d = const_cast<int>(b);

3、static_cast

1)該函數(shù)主要用于基本類型之間和具有繼承關(guān)系的類型之間的轉(zhuǎn)換。

這種轉(zhuǎn)換一般會更改變量的內(nèi)部表示方式,因此,static_cast應(yīng)用于指針類型轉(zhuǎn)換沒有太大意義。

//基本類型轉(zhuǎn)換

int i=0;

double d = static_cast<double>(i);  //相當(dāng)于 double d = (double)i;

//轉(zhuǎn)換繼承 類的對象為基類對象

class Base{};

class Derived : public Base{};

Derived d;

Base b = static_cast<Base>(d);     //相當(dāng)于 Base b = (Base)d;

4、dynamic_cast

它與static_cast相對,是動態(tài)轉(zhuǎn)換。這種轉(zhuǎn)換是在運(yùn)行時進(jìn)行轉(zhuǎn)換分析的,并非在編譯時進(jìn)行,明顯區(qū)別于上面三個類型轉(zhuǎn)換操作。

該函數(shù)只能在繼承類對象的指針之間或引用之間進(jìn)行類型轉(zhuǎn)換。進(jìn)行轉(zhuǎn)換時,會根據(jù)當(dāng)前運(yùn)行時類型信息,判斷類型對象之間的轉(zhuǎn)換是否合法。dynamic_cast的指針轉(zhuǎn)換失敗,可通過是否為null檢測,引用轉(zhuǎn)換失敗則拋出一個bad_cast異常。

例:

class Base{};

class Derived : public Base{};

//派生類指針轉(zhuǎn)換為基類指針

Derived *pd = new Derived;

Base *pb = dynamic_cast<Base*>(pd);

if (!pb)

    cout << "類型轉(zhuǎn)換失敗" << endl;

 

//沒有繼承關(guān)系,但被轉(zhuǎn)換類有虛函數(shù)

class A(virtual ~A();)   //有虛函數(shù)

class B{}:

A* pa = new A;

B* pb  = dynamic_cast<B*>(pa);

 

如果對無繼承關(guān)系或者沒有虛函數(shù)的對象指針進(jìn)行轉(zhuǎn)換、基本類型指針轉(zhuǎn)換以及基類指針轉(zhuǎn)換為派生類指針,都不能通過編譯。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++ 標(biāo)準(zhǔn)轉(zhuǎn)換運(yùn)算符static_cast
c++中的關(guān)鍵字const_cast,dynamic_cast,reinterpret_cast,static_cast 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
C++標(biāo)準(zhǔn)轉(zhuǎn)換運(yùn)算符reinterpret_cast
C++類型轉(zhuǎn)換
【C 札記】C 中的類型轉(zhuǎn)換
C++中四種類型轉(zhuǎn)換方式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服