C 中的四種型別強制轉換

2021-05-22 10:10:34 字數 2835 閱讀 8365

顯式型別轉換又被稱之為 強制型別轉換。

c 風格: (type-id)

c++風格: static_cast、dynamic_cast、reinterpret_cast、和const_cast

c風格的強制型別轉換是最好不要用的,最好是使用標準的c++風格的轉換符。

static_cast

用法:static_cast < type-id > ( expression )

說明:該運算子把expression轉換為type-id型別,但沒有執行時型別檢查來保證轉換的安全性。

主要用法:

用於類層次結構中基類和子類之間指標或引用的轉換。進行上行轉換(把子類的指標或引用轉換成基類表示)是安全的;進行下行轉換(把基類指標或引用轉換成子類指標或引用)時,由於沒有動態型別檢查,所以是不安全的。

用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。

把void指標轉換成目標型別的指標(不安全!!)

把任何型別的表示式轉換成void型別。

注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。

dynamic_cast

用法:dynamic_cast < type-id > ( expression )

說明:該運算子把expression轉換成type- id型別的物件。type-id必須是類的指標、類的引用或者void *;如果type-id是類指標型別,那麼expression也必須是乙個指標,如果type-id是乙個引用,那麼expression也必須是乙個引用。

dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。

在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;

在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。

reinterpret_cast

用法:reinterpret_cast (expression)

說明:type-id必須是乙個指標、引用、算術型別、函式指標或者成員指標。

它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,

在把該整數轉換成原型別的指標,還可以得到原先的指標值)。

該運算子的用法比較多。

const_cast

用法:const_cast (expression)

說明:該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。

常量指標被轉化成非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;常量物件被轉換成非常量物件。

顯式型別轉換又被稱之為 強制型別轉換。

c 風格: (type-id)

c++風格: static_cast、dynamic_cast、reinterpret_cast、和const_cast

c風格的強制型別轉換是最好不要用的,最好是使用標準的c++風格的轉換符。

static_cast

用法:static_cast < type-id > ( expression )

說明:該運算子把expression轉換為type-id型別,但沒有執行時型別檢查來保證轉換的安全性。

主要用法:

用於類層次結構中基類和子類之間指標或引用的轉換。進行上行轉換(把子類的指標或引用轉換成基類表示)是安全的;進行下行轉換(把基類指標或引用轉換成子類指標或引用)時,由於沒有動態型別檢查,所以是不安全的。

用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。

把void指標轉換成目標型別的指標(不安全!!)

把任何型別的表示式轉換成void型別。

注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。

dynamic_cast

用法:dynamic_cast < type-id > ( expression )

說明:該運算子把expression轉換成type- id型別的物件。type-id必須是類的指標、類的引用或者void *;如果type-id是類指標型別,那麼expression也必須是乙個指標,如果type-id是乙個引用,那麼expression也必須是乙個引用。

dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。

在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;

在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。

reinterpret_cast

用法:reinterpret_cast (expression)

說明:type-id必須是乙個指標、引用、算術型別、函式指標或者成員指標。

它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,

在把該整數轉換成原型別的指標,還可以得到原先的指標值)。

該運算子的用法比較多。

const_cast

用法:const_cast (expression)

說明:該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。

常量指標被轉化成非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;常量物件被轉換成非常量物件。

C 四種型別強制轉換

c 的四種型別強轉 分別是const cast static cast dynamic cast reinterpret cast 一 const cast const cast操作不能在不同的種類間轉換。相反,它僅僅把乙個它作用的表示式轉換成常量。它可以使乙個本來不是const型別的資料轉換成co...

c 四種型別強制轉換函式

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

C 學習筆記 四種型別強制轉換

強制轉換運算子是一種特殊的運算子,它把一種資料型別轉換為另一種資料型別。強制轉換運算子是一元運算子,它的優先順序與其他一元運算子相同。大多數的 c 編譯器都支援大部分通用的強制轉換運算子 type expression 其中,type 是轉換後的資料型別。下面列出了 c 支援的其他幾種強制轉換運算子...