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