轉換指的是經過改變一個變量的類型爲別的類型從而改變該變量的表示方式。安全
C++標準定義了四個新的轉換符:reinterpret_cast、static_cast、dynamic_cast和const_cast,目的在於控制類(class)之間的類型轉換。
1.static_cast
static_cast能夠用於類層次結構中基類和子類之間指針或引用的轉換。把子類的指針或引用轉換成基類表示是安全的,但把基類指針或引用轉換成子類指針或引用時,因爲沒有動態類型檢查,因此,它是不安全的。基類和子類之間的動態類型轉換通常建議使用dynamic_cast。static_cast能夠用做對象繼承之間轉換,只不過有安全隱患。
2.dynamic_cast
dynamic_cast用於對象的指針和引用,當用於多態類型轉換時,容許隱式轉換及相反的轉換操做,與static_cast的不一樣之處在於,而在相反的轉換過程當中,dynamic_cast會檢測操做的有效性,若是返回的不是被請求的有效完整對象,則返回null,反之返回這個有效的對象,若是是引用返回無效時,則會拋出bad_cast異常。
3.const_cast
const_cast用來修改類型的const或volatile屬性,具體而言,const_cast會操縱傳遞對象的const屬性,設置或者移除該屬性。
4.reinterpret_cast
reinterpret_cast用來處理無關類型之間的轉換,能夠轉換任意一個32位整數,包括全部的指針和整數。能夠把任何整數轉成指針,也能夠把任何指針轉成整數,以及把指針轉化爲任意類型的指針,但不能將非32位的實例轉成指針。ide