亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

解析C++中四種強制類型轉換的區別詳解

2020-01-26 16:13:09
字體:
來源:轉載
供稿:網友
C++的四種強制類型轉換,所以C++不是類型安全的。分別為:static_cast , dynamic_cast , const_cast , reinterpret_cast
為什么使用C風格的強制轉換可以把想要的任何東西轉換成合乎心意的類型。那為什么還需要一個新的C++類型的強制轉換呢?
新類型的強制轉換可以提供更好的控制強制轉換過程,允許控制各種不同種類的強制轉換。C++中風格是static_cast<type>(content)。C++風格的強制轉換其他的好處是,它們能更清晰的表明它們要干什么。程序員只要掃一眼這樣的代碼,就能立即知道一個強制轉換的目的。
四種轉換的區別:
static_cast:可以實現C++中內置基本數據類型之間的相互轉換。
復制代碼 代碼如下:

int c=static_cast<int>(7.987);

如果涉及到類的話,static_cast只能在有相互聯系的類型中進行相互轉換,不一定包含虛函數。
復制代碼 代碼如下:

class A
{};
class B:public A
{};
class C
{};

int main()
{
    A* a=new A;
    B* b;
    C* c;
    b=static_cast<B>(a);  // 編譯不會報錯, B類繼承A類
    c=static_cast<B>(a);  // 編譯報錯, C類與A類沒有任何關系
    return 1;
}

const_cast: const_cast操作不能在不同的種類間轉換。相反,它僅僅把一個它作用的表達式轉換成常量。它可以使一個本來不是const類型的數據轉換成const類型的,或者把const屬性去掉。
reinterpret_cast: 有著和C風格的強制轉換同樣的能力。它可以轉化任何內置的數據類型為其他任何的數據類型,也可以轉化任何指針類型為其他的類型。它甚至可以轉化內置的數據類型為指針,無須考慮類型安全或者常量的情形。不到萬不得已絕對不用。
dynamic_cast:
(1)其他三種都是編譯時完成的,dynamic_cast是運行時處理的,運行時要進行類型檢查。
(2)不能用于內置的基本數據類型的強制轉換。
(3)dynamic_cast轉換如果成功的話返回的是指向類的指針或引用,轉換失敗的話則會返回NULL。
(4)使用dynamic_cast進行轉換的,基類中一定要有虛函數,否則編譯不通過。
        B中需要檢測有虛函數的原因:類中存在虛函數,就說明它有想要讓基類指針或引用指向派生類對象的情況,此時轉換才有意義。
        這是由于運行時類型檢查需要運行時類型信息,而這個信息存儲在類的虛函數表(關于虛函數表的概念,詳細可見<Inside c++ object model>)中,
        只有定義了虛函數的類才有虛函數表。
 (5)在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的。在進行下行轉換時,dynamic_cast具有類型檢查的功能,比               static_cast更安全。向上轉換即為指向子類對象的向下轉換,即將父類指針轉化子類指針。向下轉換的成功與否還與將要轉換的類型有關,即要轉換的指針指向的對象的實際類型與轉換以后的對象類型一定要相同,否則轉換失敗。
參考例子:
復制代碼 代碼如下:

#include<iostream>
#include<cstring>
using namespace std;
class A
{
   public:
   virtual void f()
   {
       cout<<"hello"<<endl;
       };
};

class B:public A
{
    public:
    void f()
    {
        cout<<"hello2"<<endl;
        };

};

class C
{
  void pp()
  {
      return;
  }
};

int fun()
{
    return 1;
}
int main()
{
    A* a1=new B;//a1是A類型的指針指向一個B類型的對象
    A* a2=new A;//a2是A類型的指針指向一個A類型的對象
    B* b;
    C* c;
    b=dynamic_cast<B*>(a1);//結果為not null,向下轉換成功,a1之前指向的就是B類型的對象,所以可以轉換成B類型的指針。
    if(b==NULL)
    {
        cout<<"null"<<endl;
    }
    else
    {
        cout<<"not null"<<endl;
    }
    b=dynamic_cast<B*>(a2);//結果為null,向下轉換失敗
    if(b==NULL)
    {
        cout<<"null"<<endl;
    }
    else
    {
        cout<<"not null"<<endl;
    }
    c=dynamic_cast<C*>(a);//結果為null,向下轉換失敗
    if(c==NULL)
    {
        cout<<"null"<<endl;
    }
    else
    {
        cout<<"not null"<<endl;
    }
    delete(a);
    return 0;
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产激情久久久久| 91国内产香蕉| 成人妇女淫片aaaa视频| 欧美激情精品久久久久久免费印度| 免费91在线视频| 色樱桃影院亚洲精品影院| 中文字幕无线精品亚洲乱码一区| 久久韩国免费视频| 欧美精品在线观看91| 国产精品91一区| 色综合久综合久久综合久鬼88| 亚洲男人天堂久| 成人做爽爽免费视频| 日韩av片免费在线观看| 亚洲精品视频在线播放| 亚洲国产另类久久精品| 国产97在线播放| 亚洲a级在线观看| 庆余年2免费日韩剧观看大牛| 91精品视频免费看| 亚洲第一网站免费视频| 久久久久久久久亚洲| 欧美精品电影免费在线观看| 91牛牛免费视频| 欧美精品在线免费| 中国人与牲禽动交精品| 性夜试看影院91社区| 欧美一级bbbbb性bbbb喷潮片| 国产69精品久久久久久| 中文字幕国产亚洲| 中文字幕亚洲自拍| 热99在线视频| 国产精品一区久久久| 亚洲精品电影久久久| 日韩电影免费观看在线观看| 久久久久久国产精品三级玉女聊斋| 九九久久精品一区| 欧美日韩国产综合视频在线观看中文| 亚洲一区制服诱惑| 日韩av手机在线观看| 日韩欧美中文第一页| 日本高清不卡的在线| 久久福利视频网| 精品福利樱桃av导航| 日韩欧美一区二区在线| 91精品视频一区| 亚洲精品国产精品乱码不99按摩| 日韩av免费网站| 亚洲一区久久久| 亚洲va久久久噜噜噜久久天堂| 日韩欧美精品中文字幕| 亚洲免费伊人电影在线观看av| 一本色道久久88综合亚洲精品ⅰ| 亚洲free嫩bbb| 亚洲人成在线观看网站高清| 福利微拍一区二区| 欧美激情免费看| 国产视频观看一区| 最近中文字幕2019免费| 日韩精品亚洲元码| 成人在线视频网| 欧美精品性视频| 国产人妖伪娘一区91| 亚洲精品98久久久久久中文字幕| 亚洲影院色在线观看免费| 亚洲丁香婷深爱综合| 中文字幕国产亚洲2019| 91视频免费在线| 亚洲成成品网站| 91午夜理伦私人影院| 欧美视频在线免费看| 2021久久精品国产99国产精品| 亚洲精品中文字幕女同| 精品免费在线视频| 日本一区二区在线免费播放| 国产日韩欧美视频| 欧美日韩中文字幕日韩欧美| 在线精品高清中文字幕| 欧美电影在线播放| 亚洲大胆美女视频| 日韩av电影在线免费播放| 国产色综合天天综合网| 国产精品久久久久久久午夜| 成人亚洲综合色就1024| 亚洲丝袜在线视频| 韩剧1988在线观看免费完整版| 亚洲少妇中文在线| 欧美黑人性视频| 精品亚洲国产成av人片传媒| 两个人的视频www国产精品| 欧美激情一区二区三区成人| 国产亚洲欧洲高清一区| 欧美诱惑福利视频| 日韩在线国产精品| 91大神在线播放精品| 亚洲美女激情视频| 岛国av一区二区在线在线观看| 亚洲高清在线观看| 精品视频一区在线视频| 丰满岳妇乱一区二区三区| 日韩美女福利视频| 欧美久久精品午夜青青大伊人| 91av视频在线| 在线观看国产精品91| 国产精品普通话| 91po在线观看91精品国产性色| 国产91精品久久久| 91精品免费看| 国产精品嫩草影院久久久| 欧美精品久久久久久久久久| 热久久视久久精品18亚洲精品| 亚洲视频777| 色中色综合影院手机版在线观看| 久久91亚洲精品中文字幕| 国产精品夜间视频香蕉| 国内精品久久久久久久| 最好看的2019年中文视频| 国语自产精品视频在线看一大j8| 按摩亚洲人久久| 色午夜这里只有精品| 麻豆乱码国产一区二区三区| 久久久久久国产精品三级玉女聊斋| 欧美在线视频在线播放完整版免费观看| 欧美激情欧美狂野欧美精品| 国产美女扒开尿口久久久| 亚洲国产成人在线视频| 国内精品美女av在线播放| 欧美理论电影在线观看| 日韩成人在线电影网| 亚洲视频在线观看视频| 91香蕉嫩草影院入口| 亚洲欧美日韩在线一区| 国产精品一区二区电影| 久久久久久久久久久久久久久久久久av| 久久精视频免费在线久久完整在线看| 国产在线观看不卡| 国产欧美久久一区二区| 亚洲成人动漫在线播放| 91av免费观看91av精品在线| 亚洲国产精久久久久久久| 久久夜色精品亚洲噜噜国产mv| 欧美性xxxxxxxxx| 亚洲人永久免费| 国产精品久久久久久久久| 精品伊人久久97| 91精品国产99久久久久久| 久久久久久久久久婷婷| 色无极影院亚洲| 中文字幕av一区二区| 日本视频久久久| 国产精品一区二区久久精品| 亚洲欧美日韩国产精品| 91麻豆国产精品| 日韩美女免费线视频| 久久天天躁狠狠躁老女人| 日韩免费在线播放| 自拍亚洲一区欧美另类| 亚洲欧美精品中文字幕在线| 久久这里有精品视频| 亚洲欧美www| 国产午夜精品视频免费不卡69堂| 国产精品普通话| 久久偷看各类女兵18女厕嘘嘘| 欧美精品性视频|