static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解
1.static_cast對類的指針只能轉(zhuǎn)換有繼承關系的類。對普通的指針來說只能在void*和其他指針之間轉(zhuǎn)換。它還可轉(zhuǎn)換簡單的類型,比如int到char等。不能提供數(shù)字到指針的轉(zhuǎn)換。不能提供不同類型指針之間的轉(zhuǎn)換比如int*到char*。
2.dynamic_cast提供安全的轉(zhuǎ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)換。
相關文章
C語言 深入解讀數(shù)據(jù)結構之堆的實現(xiàn)
堆就是用數(shù)組實現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點的位置2021-11-11vscode實現(xiàn)本地代碼自動同步到遠程機器的步驟
這篇文章主要介紹了vscode實現(xiàn)本地代碼自動同步到遠程機器的步驟,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06