C和C++中的強制類型轉換?

C中是直接在變量或者表達式前面加上(小括號括起來的)目標類型來進行轉換,一招走天下,操作簡單,但是由於太過直接,缺少檢查,因此容易發生編譯檢查不到錯誤,而人工檢查又及其難以發現的情況;而C++中引入了下面四種轉換:

1). static_cast
a. 用於基本類型間的轉換
b. 不能用於基本類型指針間的轉換
c. 用於有繼承關係類對象間的轉換和類指針間的轉換
2). dynamic_cast
a. 用於有繼承關係的類指針間的轉換
b. 用於有交叉關係的類指針間的轉換
c. 具有類型檢查的功能
d. 需要虛函數的支持
3). reinterpret_cast
a. 用於指針間的類型轉換
b. 用於整數和指針間的類型轉換
4). const_cast
a. 用於去掉變量的const屬性
b. 轉換的目標類型必須是指針或者引用
在C++中,普通類型可以通過類型轉換構造函數轉換爲類類型,那麼類可以轉換爲普通類型嗎?答案是肯定的。但是在工程應用中一般不用類型轉換函數,因爲無法抑制隱式的調用類型轉換函數(類型轉換構造函數可以通過explicit來抑制其被隱式的調用),而隱式調用經常是bug的來源。實際工程中替代的方式是定義一個普通函數,通過顯式的調用來達到類型轉換的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章