c++
同時提供了四種新的強制轉型形式(通常稱為新風格的或
c++
風格的強制轉型):
dynamic_cast(expression)
reinterpret_cast(expression)
static_cast(expression)
const_cast
const_cast 允許新增或刪除指標或引用表示式型別的const或 volatile 關鍵字。它是唯一能做到這一點的 c++ 風格的強制轉型。
dynamic_cast
dynamic_cast僅適用於多型型別的向下轉換,被轉換的型別必須是乙個指向含有虛函式的類型別的指標。它是唯一不能用舊風格語法執行的強制轉型,也是唯一可能有重大執行時代價的強制轉型。
dynamic_cast 只用於物件的指標和引用。當用於多型型別時,它允許任意的隱式型別轉換以及相反過程。不過,與static_cast不同,在後一種情況裡(注:即隱式轉換的相反過程),dynamic_cast會檢查操作是否有效。也就是說,它會檢查轉換是否會返回乙個被請求的有效的完整物件。檢測在執行時進行。如果被轉換的指標不是乙個被請求的有效完整的物件指標,返回值為null。
如果乙個引用型別執行了型別轉換並且這個轉換是不可能的,乙個 bad_cast 的異常型別被丟擲:
reinterpret_cast
reinterpret_cast 從位的角度來看待乙個物件,從而允許將乙個東西看成是完全不同的另乙個東西,最強的一種轉換。操作結果只是簡單的從乙個指標到別的指標的值的二進位制拷貝。在型別之間指向的內容不做任何型別的檢查和轉換。
例如:
static_cast
static_cast 可以被用於強制隱型轉換(例如,non-const 物件轉型為 const 物件,int 轉型為 double,等等)。它還可以用於很多這樣的轉換的反向轉換(例如,void* 指標轉型為有型別指標,基類指標轉型為派生類指標),但是它不能將乙個 const 物件轉型為 non-const 物件。(只有 const_cast 能做到)
static_cast 允許執行任意的隱式轉換和相反轉換動作。應用到類的指標上,意思是說它允許子類型別的指標轉換為父類型別的指標(這是乙個有效的隱式轉換),同時,也能夠執行相反動作:轉換父類為它的子類。在這最後例子裡,被轉換的父類沒有被檢查是否與目的型別相一致。
static_cast 也能用於執行型別定義的顯式的轉換,以及基礎型別之間的標準轉換:
c 中四種強制型別轉換
形式 cast name expression type 是轉換的目標型別,expression 是要轉換的值。任何具有明確定義的型別轉換,只要不包含底層const,都可以使用 static cast。例如double a 3.14 int b 3 int a1 static cast int a ...
C 四種強制型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種強制型別轉換
1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...