五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++那些事:C++引入的 4 種類(lèi)型轉(zhuǎn)換,我們應(yīng)該怎樣使用?

2021-03-18 18:41 作者:C語(yǔ)言編程__Plus  | 我要投稿



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

(1)static_cast

(2)const_cast

(3)dynamic_cast

(4)reinterpret_cast


1、為什么要引入這幾種類(lèi)型轉(zhuǎn)換?

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

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

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

static_cast

使用方式:


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

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

dynamic_cast

使用方式:


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

const_cast

使用方式:


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

reinterpret_cast

使用方式:


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

彎道超車(chē),快人一步!筆者這里或許可以幫到你~

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!



C++那些事:C++引入的 4 種類(lèi)型轉(zhuǎn)換,我們應(yīng)該怎樣使用?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
天门市| 凌源市| 平邑县| 六盘水市| 廊坊市| 龙门县| 西华县| 大安市| 南溪县| 平定县| 屏边| 阳新县| 从江县| 贵州省| 玛沁县| 贡山| 油尖旺区| 柘城县| 陆良县| 剑阁县| 安宁市| 寻乌县| 平南县| 漯河市| 邹城市| 闵行区| 玉屏| 墨玉县| 临沧市| 西林县| 垦利县| 偏关县| 三原县| 大埔县| 思茅市| 积石山| 凤庆县| 柯坪县| 太谷县| 堆龙德庆县| 桐庐县|