C風格的強制轉換爲 (T)expressionexpress
C++標準定義了四個新的轉換符
1. dynamic_cast
只用於對象的指針和引用。轉換失敗時,指針爲空,引用則拋出bad_cast異常。
主要用於執行「安全的向下類型的轉換」。
要求父類必須有虛函數。
此cast根據RTTI信息檢查操做是否有效,它是惟一可能有重大運行時代價的強制轉型。
把指向父類的指針或引用轉換爲指向子類的,可能有重大的運行時開銷
2. const_cast
const_cast<type_id>(expression)
用於修改類型的const或volatile屬性。除了const或volatile修飾以外,type_id和expression的類型是同樣的。通常用於強制消除對象的常量性。
去除const,volatile等屬性
3.static_cast
static_cast<type-id>(expression)
把expression轉換成type-id類型,但沒有運行時類型檢查來保證轉換的安全性。它容許執行任意的隱式轉換和相反轉換動做。
此cast最相似於c的強制類型轉換,但要注意:
a) 不能轉換掉expression的const,volatile或者__unaligned屬性。
b)在非基本類型或上下轉型中,被轉換的父類要檢查是否與目的類型相一致,不然,若是在兩個不相干的類之間進行轉換,將會致使編譯出錯。
最像c的強制類型轉換,對去除const屬性無效,對不相關的類的類型轉換無效,對指針引用與算數類型轉換無效
4.reinpreter_cast
reinpreter_cast<type-id>(expression)
type-id必須是一個指針、引用、算術類型、函數指針或者成員指針。它能夠把一個指針轉換成一個整數,也能夠把一個整數轉換成一個指針。
這個操做符可以在非相關的類型之間轉換。操做結果只是簡單的從一個指針到別的值的二進制拷貝。在類型之間只想的內容不作任何類型的檢查和轉換。reinpreter_cast是特地用於底層的強制轉型,致使實現依賴(就是說,不可移植)的結果。
指針或引用同其餘類型間的轉換,典型用例爲指針和int類型轉換
不能對int和char等轉換,它只是簡單的二進制拷貝,這不一樣於static_cast