c 四種強制轉換

2021-05-23 18:56:44 字數 802 閱讀 9856

c++ 同時提供了四種新的強制轉型形式(通常稱為新風格的或 c++ 風格的強制轉型): 

const_cast(expression) 

dynamic_cast(expression)

reinterpret_cast(expression)

static_cast(expression)

每一種適用於特定的目的:

·const_cast 一般用於強制消除物件的常量性。它是唯一能做到這一點的 c++ 風格的強制轉型。

·dynamic_cast 主要用於執行「安全的向下轉型(safe downcasting)」,也就是說,要確定乙個物件是否是乙個繼承體系中的乙個特定型別。它是唯一不能用舊風格語法執行的強制轉型。也是唯一可能有重大執行時代價的強制轉型。(過一會兒我再提供細節。)

·reinterpret_cast 是特意用於底層的強制轉型,導致實現依賴(implementation-dependent)(就是說,不可移植)的結果,例如,將乙個指標轉型為乙個整數。這樣的強制轉型在底層**以外應該極為罕見。在本書中我只用了一次,而且還僅僅是在討論你應該如何為裸記憶體(raw memory)寫乙個調諧分配者(debugging allocator)的時候。

·static_cast 可以被用於強制隱型轉換(例如,non-const 物件轉型為 const 物件(就像 item 3 中的),int 轉型為 double,等等)。它還可以用於很多這樣的轉換的反向轉換(例如,void* 指標轉型為有型別指標,基類指標轉型為派生類指標),但是它不能將乙個 const 物件轉型為 non-const 物件。(只有 const_cast 能做到。)

C 四種強制轉換

c 的四種強制型別轉換,所以c 不是型別安全的。分別為 static cast dynamic cast const cast reinterpret cast 為什麼使用c風格的強制轉換可以把想要的任何東西轉換成合乎心意的型別。那為什麼還需要乙個新的c 型別的強制轉換呢?新型別的強制轉換可以提供更...

C 四種強制轉換

c 的四種強制型別轉換,所以c 不是型別安全的。分別為 static cast dynamic cast const cast reinterpret cast。為什麼使用c風格的強制轉換可以把想要的任何東西轉換成合乎心意的型別。那為什麼還需要乙個新的c 型別的強制轉換呢?新型別的強制轉換可以提供更...

C 四種強制轉換

c 的四種強制型別轉換,所以c 不是型別安全的。分別為 static cast dynamic cast const cast reinterpret cast 為什麼使用c風格的強制轉換可以把想要的任何東西轉換成合乎心意的型別。那為什麼還需要乙個新的c 型別的強制轉換呢?新型別的強制轉換可以提供更...