真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++類型轉(zhuǎn)換引入了那幾種方式

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)C++類型轉(zhuǎn)換引入了那幾種方式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

羅甸網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

眾所周知C++關(guān)于類型轉(zhuǎn)換引入了四種方式:

  • static_cast

  • const_cast

  • dynamic_cast

  • reinterpret_cast

  1.  為什么要引入這幾種類型轉(zhuǎn)換,它與C語言中的強(qiáng)制類型轉(zhuǎn)換有什么區(qū)別?

  2.  這四種類型轉(zhuǎn)換分別應(yīng)用在什么場景?

C++為什么要引入這幾種強(qiáng)制類型轉(zhuǎn)換?

我們都知道C++完全兼容C語言,C語言的轉(zhuǎn)換方式很簡單,可以在任意類型之間轉(zhuǎn)換,但這也恰恰是缺點(diǎn),因為極其不安全,可能不經(jīng)意間將指向const對象的指針轉(zhuǎn)換成非const對象的指針,可能將基類對象指針轉(zhuǎn)成了派生類對象的指針,這種轉(zhuǎn)換很容易出bug,需要嚴(yán)格審查代碼才能消除這種隱患,但是C這種轉(zhuǎn)換方式不利于我們審查代碼,且程序運(yùn)行時也可能會出bug。

而C++引入的這幾種類型轉(zhuǎn)換可以完美的解決上述問題,不同場景下不同需求使用不同的類型轉(zhuǎn)換方式,同時有利于代碼審查。

下面詳細(xì)介紹這四種類型轉(zhuǎn)換的使用場景:

static_cast

使用方式:

#include   using namespace std;  struct Base {      virtual void Func() { cout << "Base Func \n"; }  }; struct Derive : public Base {      void Func() override { cout << "Derive Func \n"; }  };  int main() {      float f = 1.23;      cout << "f " << f << endl;      int i = static_cast(f);      cout << "i " << i << endl;       int *pi = static_cast(&f);  // error invalid static_cast from type ‘float*’ to type ‘int*’     Derive d;      d.Func();      Base *b = static_cast(&d);      b->Func();      return 0;  }

使用場景:基本數(shù)據(jù)類型之間的轉(zhuǎn)換使用,例如float轉(zhuǎn)int,int轉(zhuǎn)char等,在有類型指針和void*之間轉(zhuǎn)換使用,子類對象指針轉(zhuǎn)換成父類對象指針也可以使用static_cast。

非多態(tài)類型轉(zhuǎn)換一般都使用static_cast,而且最好把所有的隱式類型轉(zhuǎn)換都是用static_cast進(jìn)行顯示替換,不能使用static_cast在有類型指針之間進(jìn)行類型轉(zhuǎn)換。

dynamic_cast

使用方式:

#include   using namespace std;  struct Base {      virtual void Func() { cout << "Base Func \n"; }  };  struct Derive : public Base {      void Func() override { cout << "Derive Func \n"; }  };  int main() {      Derive d;     d.Func();      Base *b = dynamic_cast(&d);      b->Func();      Derive *dd = dynamic_cast(b);      dd->Func();      return 0;  }

使用場景:用于將父類的指針或引用轉(zhuǎn)換為子類的指針或引用,此場景下父類必須要有虛函數(shù),因為dynamic_cast是運(yùn)行時檢查,檢查需要運(yùn)行時信息RTTI,而RTTI存儲在虛函數(shù)表中,關(guān)于虛函數(shù)表具體可以看我的這篇文章:面試系列之C++的對象布局

const_cast

使用方式:

int main() {      int data = 10;      const int *cpi = &data;      int *pi = const_cast(cpi);      const int *cpii = const_cast(pi);      return 0;  }

使用場景:用于常量指針或引用與非常量指針或引用之間的轉(zhuǎn)換,只有const_cast才可以對常量進(jìn)行操作,一般都是用它來去除常量性,去除常量性是危險操作,還是要謹(jǐn)慎操作。

reinterpret_cast

使用方式:

int main() {      int data = 10;      int *pi = &data;      float *fpi = reinterpret_cast(pi);      return 0;  }

使用場景:沒啥場景,類似C語言中的強(qiáng)制類型轉(zhuǎn)換,什么都可以轉(zhuǎn),萬不得已不要使用,一般前三種轉(zhuǎn)換方式不能解決問題了使用這種強(qiáng)制類型轉(zhuǎn)換方式。

上述就是小編為大家分享的C++類型轉(zhuǎn)換引入了那幾種方式了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前標(biāo)題:C++類型轉(zhuǎn)換引入了那幾種方式
鏈接URL:http://weahome.cn/article/geioej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部