C 中四種強制型別轉換

2021-06-19 19:54:53 字數 1233 閱讀 3070

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...