static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解
1.static_cast對(duì)類的指針只能轉(zhuǎn)換有繼承關(guān)系的類。對(duì)普通的指針來說只能在void*和其他指針之間轉(zhuǎn)換。它還可轉(zhuǎn)換簡(jiǎ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++ BloomFilter布隆過濾器應(yīng)用及概念詳解
布隆過濾器是由布隆(Burton Howard Bloom)在1970年提出的 一種緊湊型的、比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu),特點(diǎn)是高效地插入和查詢,可以用來告訴你 “某樣?xùn)|西一定不存在或者可能存在”,它是用多個(gè)哈希函數(shù),將一個(gè)數(shù)據(jù)映射到位圖結(jié)構(gòu)中2023-03-03
c++ 完備的運(yùn)行時(shí)類型信息(動(dòng)態(tài)類型信息)
這篇文章主要介紹了c++ 完備的運(yùn)行時(shí)類型信息,需要的朋友可以參考下2017-07-07
C++中圖片類型的識(shí)別與轉(zhuǎn)換詳解方法
本文簡(jiǎn)單的介紹一下C++語言中如何識(shí)別圖片文件的類型,以及各圖片類型之間的轉(zhuǎn)換方法,并提供相關(guān)的源碼供大家參考,感興趣的朋友快來看看吧2021-11-11
C++高精度計(jì)時(shí)的幾種方法總結(jié)(測(cè)試函數(shù)運(yùn)行時(shí)間)
本文介紹了C++中常用的幾種程序計(jì)時(shí)方法,包括clock()函數(shù)、GetTickCount()、QueryPerformanceCounter()以及C++11中的chrono庫函數(shù),這篇文章主要介紹了C++高精度計(jì)時(shí)的幾種方法,需要的朋友可以參考下2024-09-09

