国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C++為什么非要引入那幾種類型轉(zhuǎn)換?

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

[[361030]]

本文轉(zhuǎn)載自微信公眾號「程序喵大人」,作者程序喵大人 。轉(zhuǎn)載本文請聯(lián)系程序喵大人公眾號。

大家好,我是程序喵,今天我們放松下,看一些類型轉(zhuǎn)換的知識點(diǎn)!

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

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast

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

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

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

我們都知道C++完全兼容C語言,C語言的轉(zhuǎn)換方式很簡單,可以在任意類型之間轉(zhuǎn)換,但這也恰恰是缺點(diǎn),因?yàn)闃O其不安全,可能不經(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)換的使用場景:

  1. static_cast 

使用方式:

  1. #include <iostream> 
  2.  
  3. using namespace std; 
  4.  
  5. struct Base { 
  6.     virtual void Func() { cout << "Base Func \n"; } 
  7. }; 
  8.  
  9. struct Derive : public Base { 
  10.     void Func() override { cout << "Derive Func \n"; } 
  11. }; 
  12.  
  13. int main() { 
  14.     float f = 1.23; 
  15.     cout << "f " << f << endl; 
  16.     int i = static_cast<int>(f); 
  17.     cout << "i " << i << endl; 
  18.  
  19.     int *pi = static_cast<int *>(&f);  // error invalid static_cast from type ‘float*’ to type ‘int*’ 
  20.  
  21.     Derive d; 
  22.     d.Func(); 
  23.     Base *b = static_cast<Base *>(&d);  
  24.     b->Func(); 
  25.     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)換。

  1. dynamic_cast 

使用方式:

  1. #include <iostream> 
  2.  
  3. using namespace std; 
  4.  
  5. struct Base { 
  6.     virtual void Func() { cout << "Base Func \n"; } 
  7. }; 
  8.  
  9. struct Derive : public Base { 
  10.     void Func() override { cout << "Derive Func \n"; } 
  11. }; 
  12.  
  13. int main() { 
  14.     Derive d; 
  15.     d.Func(); 
  16.     Base *b = dynamic_cast<Base *>(&d); 
  17.     b->Func(); 
  18.     Derive *dd = dynamic_cast<Derive *>(b); 
  19.     dd->Func(); 
  20.     return 0; 

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

  1. const_cast 

使用方式:

  1. int main() { 
  2.     int data = 10; 
  3.     const int *cpi = &data; 
  4.  
  5.     int *pi = const_cast<int *>(cpi); 
  6.  
  7.     const int *cpii = const_cast<const int *>(pi); 
  8.     return 0; 

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

  1. reinterpret_cast 

使用方式:

  1. int main() { 
  2.     int data = 10; 
  3.     int *pi = &data; 
  4.  
  5.     float *fpi = reinterpret_cast<float *>(pi); 
  6.  
  7.     return 0; 

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

 

責(zé)任編輯:武曉燕 來源: 程序喵大人
相關(guān)推薦

2021-03-11 14:46:05

C++類型轉(zhuǎn)換語言

2024-03-12 08:29:28

C++類型轉(zhuǎn)換方式

2024-05-21 14:04:16

2025-08-18 02:12:00

2020-08-12 12:20:09

Python Java編程語言

2011-12-26 15:58:01

枚舉

2010-02-04 16:52:45

C++顯式轉(zhuǎn)換

2022-11-28 09:58:58

C++開發(fā)

2010-03-12 17:29:16

Python模塊

2025-01-20 00:13:19

TypeScript操作符數(shù)據(jù)類型

2016-04-25 14:11:12

華為ICT巡展

2009-08-12 16:26:27

C#數(shù)據(jù)類型轉(zhuǎn)換

2016-12-20 16:35:52

NodeJSC++類型轉(zhuǎn)換

2010-02-03 11:11:18

C++類型轉(zhuǎn)換

2011-07-14 10:39:08

強(qiáng)制類型轉(zhuǎn)換函數(shù)C++

2016-12-07 11:23:52

NodeJSC++

2010-01-20 14:03:12

C++程序

2010-01-22 15:14:37

學(xué)習(xí)C++

2024-01-24 11:24:03

C++編程異常處理

2022-03-11 15:40:49

PaaS云服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

毛片av在线| 无码人妻h动漫| 欧美粗大gay| 日韩中文在线中文网在线观看 | 韩国中文免费在线视频| 成人在线视频一区| 国产精品2018| 亚洲日本va| 精品久久久久久综合日本欧美| 热久久精品国产| 欧美一区二区三区久久| 日韩亚洲欧美高清| 免费不卡av| 久久久国产一区二区| 国产亚洲一区二区三区啪| 91麻豆精品久久久久蜜臀| 在线观看黄网| 一区二区三区在线免费播放 | 天天色综合4| 国产一区二区三区日韩| 成人一区二区av| av影院午夜一区| 老子影院午夜伦不卡大全| 久久精品国产77777蜜臀| 国产精品久久成人免费观看| 久久av老司机精品网站导航| 91久久国产综合久久蜜月精品| 亚洲网址在线观看| 亚洲欧美另类人妖| 欧美另类视频| 国产三级在线观看| 免费影院在线观看一区| 91精品国产麻豆国产自产在线| 日韩成人午夜精品| 欧洲av一区二区| 少妇激情av一区二区三区| 国产91免费视频| 欧美精品做受xxx性少妇| 欧美日韩在线第一页| 美女脱光内衣内裤视频久久影院| 国产精品亚洲欧美一级在线| 美女激情网站| 成人在线视频网址| 欧美一区二区三区色| 影视一区二区| 在线观看视频色潮| 亚洲free嫩bbb| 色婷婷精品久久二区二区蜜臀av| 亚洲人成精品久久久| 欧美 日韩精品| 国产999在线观看| 亚洲国产精品黑人久久久| 肉肉视频在线观看| 国产精品欧美激情在线播放| 国产精品一区二区在线观看不卡 | 亚洲精品无码国产| 波多野结衣中文字幕一区二区三区| 9久久婷婷国产综合精品性色| 一本一道久久a久久精品 | 欧美猛男gaygay网站| 欧美爱爱网站| 国产精品久久久久久久av大片| 亚洲最大黄网| 97福利一区二区| 精品免费av| 怡红院红怡院欧美aⅴ怡春院| 精品久久久久久无码国产| 岛国一区二区三区高清视频| 欧美噜噜久久久xxx| 久久99精品久久久久久秒播放器| 欧美人成在线视频| 国产一区二区三区视频| 天天综合日日夜夜精品| 久久综合一区二区| proumb性欧美在线观看| 天堂一区二区在线免费观看| 欧美人成在线| 夜夜嗨一区二区| 欧美独立站高清久久| 精品国产免费人成网站| 国产午夜在线| 视频在线精品一区| 国产精品高清免费在线观看| 欧美中文字幕一二三区视频| 极品少妇一区二区| 亚洲精品久久| 欧美xxxxxx| 人成福利视频在线观看| 国产裸体写真av一区二区| av免费在线播放网站| 精品乱码亚洲一区二区不卡| 久久久久午夜电影| 午夜视频99| 欧美一区二三区| 欧美韩国日本不卡| 亚洲一级大片| 成人性生交免费看| 国产69精品99久久久久久宅男| 99视频国产精品| 日韩一级特黄| 久久婷婷五月综合色国产香蕉| 中文日韩在线观看| 91美女片黄在线观看91美女| jizz久久久久久| 黄色网页免费在线观看| 日韩网站免费观看| 久久人人97超碰com| 中文字幕一区二区三区日韩精品| 天堂av在线网站| 国产精品91久久| 色婷婷亚洲婷婷| 亚洲欧美网站| 精品捆绑调教一区二区三区| 国产成人生活片| 欧美老女人在线视频| 亚洲欧洲av一区二区三区久久| 自拍偷拍精品| 国产九九在线| 亚洲在线观看一区| www日韩中文字幕在线看| 国产亚洲欧美日韩在线一区| 欧洲亚洲一区二区三区| 在线观看高清av| 欧美一区二区三区四区五区六区| 亚洲精品美女网站| 婷婷激情一区| 性xxxfreexxxx性欧美| 日韩免费福利视频| 免费观看成人性生生活片 | 美女呻吟一区| 国内精品国产三级国产a久久| 国产精品一区在线看| 中文字幕人成一区| 欧美激情一级欧美精品| 岛国成人av| 国内偷自视频区视频综合| 亚洲日本乱码在线观看| 影音先锋久久资源网| 91探花在线观看| 91视频免费版污| 亚洲字幕在线观看| 日韩精品免费观看| 亚洲天堂a在线| 国产欧美91| 玖玖玖电影综合影院| 精品999视频| 国产精品久久国产| 国产美女久久久| 亚洲精品999| 亚洲男人的天堂一区二区| 中文久久精品| 91精品国产自产在线丝袜啪| 国产在线中文字幕| 无码专区aaaaaa免费视频| 国产精品偷伦免费视频观看的| 欧美一区2区视频在线观看| 久久蜜桃av一区精品变态类天堂| 97精品国产| 羞羞影院欧美| 久久免费看视频| 日韩精品一区二区三区久久| 18成人在线| 欧美日本亚洲视频| 日韩亚洲欧美一区| 一区二区视频在线看| 国内精品国产三级国产a久久| 欧美性感美女一区二区| 亚洲天堂一区二区| 9色在线视频| 国产国产人免费人成免费视频| 中文字幕久久一区| 97se亚洲综合| 91精品国产免费久久久久久| 日韩精品免费一线在线观看| 欧美日韩另类字幕中文| 99久免费精品视频在线观看 | 国产综合久久久久久| 亚洲色图美腿丝袜| 狠狠躁天天躁日日躁欧美| 97se亚洲国产综合自在线不卡 | 日韩免费一区二区三区| 91成人在线视频| 国产一区二区三区日韩欧美| 欧美日韩精品一区二区在线播放| 国产精品狼人久久影院观看方式| 麻豆中文一区二区| 午夜av一区| 日韩av影院| 亚洲国产aⅴ精品一区二区三区| 菠萝菠萝蜜在线观看| 在线播放av片| 成人天堂av| 免费成人在线视频网站| 亚洲欧美电影在线观看| **亚洲第一综合导航网站| 亲子乱一区二区三区电影 | 精品国产免费久久| 欧美日韩一区小说| 午夜精品视频在线观看| 中文字幕不卡的av|