static_cast
- 對類的指針只能轉換有繼承關系的類。對普通的指針來說只能在
void*
和其他指針之間轉換。它還可轉換簡單的類型,比如int
到char
等。不能提供數字到指針的轉換。不能提供不同類型指針之間的轉換比如int*
到char*
。
dynamic_cast
- 提供安全的轉換如果兩個指針不存在繼承關系轉換會失敗返回空指針,如果你提供一個錯誤的指針那樣會發生內存訪問異常,因為它會去比較兩個類型的虛函數表。虛函數表的指針一般放在對象指針最開始的四字節中,你去訪問一個錯誤的地址這樣肯定會發生異常。
reinterpret_cast
- 提供數字到指針間的轉換比如
void*
到int
。提供不同類型指針的強制轉換比如int*
到char*
。不提供int
到char
的轉換。但是處理類指針轉換的時候不能用它,它不會自動的調整指針。
const_cast
- 把一個
const
指針轉為非const
,最好不要用這個轉換。