static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解
1.static_cast對類的指針只能轉(zhuǎn)換有繼承關(guān)系的類。對普通的指針來說只能在void*和其他指針之間轉(zhuǎn)換。它還可轉(zhuǎn)換簡單的類型,比如int到char等。不能提供數(shù)字到指針的轉(zhuǎn)換。不能提供不同類型指針之間的轉(zhuǎn)換比如int*到char*。
2.dynamic_cast提供安全的轉(zhuǎn)換如果兩個指針不存在繼承關(guān)系轉(zhuǎn)換會失敗返回空指針,如果你提供一個錯誤的指針那樣會發(fā)生內(nèi)存訪問異常,因為它會去比較兩個類型的虛函數(shù)表。虛函數(shù)表的指針一般放在對象指針最開始的四字節(jié)中,你去訪問一個錯誤的地址這樣肯定會發(fā)生異常。
3.reinterpret_cast提供數(shù)字到指針間的轉(zhuǎn)換比如void*到int。提供不同類型指針的強制轉(zhuǎn)換比如int*到char*。不提供int到char的轉(zhuǎn)換。但是處理類指針轉(zhuǎn)換的時候不能用它,它不會自動的調(diào)整指針。
4.const_cast把一個const指針轉(zhuǎn)為非const,最好不要用這個轉(zhuǎn)換。
相關(guān)文章
C++ BloomFilter布隆過濾器應(yīng)用及概念詳解
布隆過濾器是由布隆(Burton Howard Bloom)在1970年提出的 一種緊湊型的、比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu),特點是高效地插入和查詢,可以用來告訴你 “某樣?xùn)|西一定不存在或者可能存在”,它是用多個哈希函數(shù),將一個數(shù)據(jù)映射到位圖結(jié)構(gòu)中2023-03-03
C++高精度計時的幾種方法總結(jié)(測試函數(shù)運行時間)
本文介紹了C++中常用的幾種程序計時方法,包括clock()函數(shù)、GetTickCount()、QueryPerformanceCounter()以及C++11中的chrono庫函數(shù),這篇文章主要介紹了C++高精度計時的幾種方法,需要的朋友可以參考下2024-09-09

