一、C方式的強制類型轉換
C語言的強制類型轉換的代碼如圖1所示:
圖1
C語言方式強制類型轉換存在的問題
過於粗暴;任意類型之間都可以進行轉換,編譯器很難判斷其正確性。
難於定位;在源代碼中無法快速定位所有使用強制類型轉換的語句。
二、C++的新式類型轉換
C++將強制類型轉換分爲4種不同的類型。如下圖所示;
圖2
4種強制類型轉換的詳細介紹如下:
(1)static_cast強制類型轉換:用於基本類型間的轉換;不能用於基本類型指針間的轉換;用於有繼承關係類對象之間的轉換和類指針之間的轉換。
(2)cosnt_cast強制類型轉換:用於去除變量的只讀屬性;強制轉換的目標類型必須是指針或引用。
(3)reinterpret_cast強制類型轉換:用於指針類型間的強制轉換;用於整數和指針類型間的強制轉換。
(4)dynamic_cast強制類型轉換:用於有繼承類型的類指針間的轉換;用於有交叉關係的類指針間的轉換;具有類型檢查的功能;需要虛函數的支持。
三、小結
C方式的強制類型轉換
- 過於粗暴;
- 潛在的問題不易被發現
- 不易在代碼中定位
新式類型轉換以C++關鍵字的方式出現
- 編譯器能夠幫助檢查潛在的問題
- 非常方便的在代碼中定位
- 支持動態類型識別(dynamic_cast)