C 4種型別轉換

2021-06-28 06:10:10 字數 1343 閱讀 4882

c++型別轉換

const_cast,去const屬性。

static_cast,靜態型別轉換。如int轉換成char。

dynamic_cast,動態型別轉換。如子類和父類之間的多型型別轉換。

reinterpret_cast,僅僅重新解釋型別,但沒有進行二進位制的轉換。

const_cast:

const int& a = 9;

const_cast(a) = 10;

cout類似於c風格的強制轉換。無條件轉換,靜態型別轉換。用於:

1. 基類和子類之間轉換:其中子類指標轉換成父類指標是安全的;但父類指標轉換成子類指標是不安全的。(基類和子類之間的動態型別轉換建議用dynamic_cast)

2. 基本資料型別轉換。enum, struct, int, char, float等。static_cast不能進行無關型別(如非基類和子類)指標之間的轉換。

3. 把空指標轉換成目標型別的空指標。

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

5. static_cast不能去掉型別的const、volitale屬性(用const_cast)。

dynamic_cast:

有條件轉換,動態型別轉換,執行時型別安全檢查(轉換失敗返回null):

1. 安全的基類和子類之間轉換。

2. 必須要有虛函式。

3. 相同基類不同子類之間的交叉轉換。但結果是null。

derivedclass* pb = new derivedclass();

baseclass *pd1 = static_cast(pb);//子類轉換為父類 不推薦

baseclass* pd2 = dynamic_cast(pb);//子類轉父類

baseclass* pb2 = new baseclass();

derivedclass* pd21 = static_cast(pb2);//父類轉子類 非常不安全

derivedclass* pd22 = dynamic_cast(pb2);//父類轉子類

reinterpret_cast:

僅僅重新解釋型別,但沒有進行二進位制的轉換:

1. 轉換的型別必須是乙個指標、引用、算術型別、函式指標或者成員指標。

2. 在位元位級別上進行轉換。它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,在把該整數轉換成原型別的指標,還可以得到原先的指標值)。但不能將非32bit的例項轉成指標。

3. 最普通的用途就是在函式指標型別之間進行轉換。

4. 很難保證移植性。

這個不怎麼理解,好像也沒用到過!

C 4種型別轉換

總 結 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast 注 頂層con...

C 4種型別轉換詳解

在c c 語言中用 type value 在c 還可以採用type value 來進行顯式型別轉換 explicit type conversion 常常又被稱為強制轉換 cast投射 鑄模 這種轉換的正確性完全掌握在程式設計師手中,傳統上強制轉換往往被過度使用,成為c 程式犯錯的乙個主要根源。為了...

C 4種強制型別轉換

c 的四種強制型別轉換為 static cast const cast reinterpret cast和dynamic cast 型別轉換的一般形式 cast name expression 任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast double sl...