static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解
1.static_cast對(duì)類(lèi)的指針只能轉(zhuǎn)換有繼承關(guān)系的類(lèi)。對(duì)普通的指針來(lái)說(shuō)只能在void*和其他指針之間轉(zhuǎn)換。它還可轉(zhuǎn)換簡(jiǎn)單的類(lèi)型,比如int到char等。不能提供數(shù)字到指針的轉(zhuǎn)換。不能提供不同類(lèi)型指針之間的轉(zhuǎn)換比如int*到char*。
2.dynamic_cast提供安全的轉(zhuǎn)換如果兩個(gè)指針不存在繼承關(guān)系轉(zhuǎn)換會(huì)失敗返回空指針,如果你提供一個(gè)錯(cuò)誤的指針那樣會(huì)發(fā)生內(nèi)存訪(fǎng)問(wèn)異常,因?yàn)樗鼤?huì)去比較兩個(gè)類(lèi)型的虛函數(shù)表。虛函數(shù)表的指針一般放在對(duì)象指針最開(kāi)始的四字節(jié)中,你去訪(fǎng)問(wèn)一個(gè)錯(cuò)誤的地址這樣肯定會(huì)發(fā)生異常。
3.reinterpret_cast提供數(shù)字到指針間的轉(zhuǎn)換比如void*到int。提供不同類(lèi)型指針的強(qiáng)制轉(zhuǎn)換比如int*到char*。不提供int到char的轉(zhuǎn)換。但是處理類(lèi)指針轉(zhuǎn)換的時(shí)候不能用它,它不會(huì)自動(dòng)的調(diào)整指針。
4.const_cast把一個(gè)const指針轉(zhuǎn)為非const,最好不要用這個(gè)轉(zhuǎn)換。
相關(guān)文章
C語(yǔ)言 深入解讀數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)
堆就是用數(shù)組實(shí)現(xiàn)的二叉樹(shù),所以它沒(méi)有使用父指針或者子指針。堆根據(jù)“堆屬性”來(lái)排序,“堆屬性”決定了樹(shù)中節(jié)點(diǎn)的位置2021-11-11C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C++實(shí)現(xiàn)LeetCode(155.最小棧)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(155.最小棧),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話(huà)簿
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話(huà)簿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟
這篇文章主要介紹了vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié)
這篇文章主要介紹了C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié),是算法設(shè)計(jì)中比較經(jīng)典的一個(gè)遍歷算法,需要的朋友可以參考下2014-08-08