C 型別轉換整理

2021-06-06 00:09:15 字數 1828 閱讀 9544

c++ 提供四種新式轉型(常常被稱為new-style 或c++-style casts) :

const_cast( e}(expression )

dynamic_cast( expression)

reinterpret_cast( expression)

static_cast(ωψression )

各有不同的目的:

• const_cast通常被用來將物件的常量性轉除(cast away the constness) 。它也是唯一有此能力的c++-style 轉型操作符.

• dynamic_cast 主要用來執行"安全向下轉型" ( safe downcasting) ,也就是用來決定某物件是否歸屬繼承體系中的某個型別。它是唯-無法由舊式語法執行的動作,也是唯一可能耗費重大執行成本的轉型動作.有條件轉換,動態型別轉換,執行時型別安全檢查(轉換失敗返回null):

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

2. 必須要有虛函式。

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

•reinterpret_cast 意固執行低階轉型,實際動作(及結果)可能取決於編譯器,這也就表示它不可移植。例如將乙個pointer to int 轉型為乙個int。這一類轉型在低階**以外很少見。僅僅重新解釋型別,但沒有進行二進位制的轉換:

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

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

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

4. 很難保證移植性。

• static cast 用來強迫隱式轉換(implicit conversions) ,例如將非const轉化問const,int轉換為double等,也可以執行反向轉換。但無法將const轉換為非const

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

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

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

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

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

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

總結

去const屬性用const_cast。

基本型別轉換用static_cast。

多型類之間的型別轉換用daynamic_cast。

不同型別的指標型別轉換用reinterpreter_cast。

通常你想在乙個你認定為derived class 物件身上執行derived class 操作函式,但你的手上卻只有-個"指向base" 的pointer 或reference ,你只能靠它們來處理物件。有兩個一般性做法可以避免這個問題。

1 使用容器並在其中儲存直接指向derived class 物件的指標(通常是智慧型指標),然後,通過stl迭代器,處理該物件。但這種做法,無法在容器中,儲存指標指向所有基類的派生類。若需要處理多個派生類,則需要多個容器。

2 基類提供虛函式,使用容器,儲存基類物件指標,然後用迭代器呼叫。

絕對必須避免的一件事是所謂的"連串(cascading) dynamic_casts"

C 特有型別轉換整理

通用的型別轉換格式 型別說明符 表示式 int a b a 1.4 b 1 其實通用的型別轉換可以細分為三種型別轉換,分別是static cast,const cast,reinterpret cast.static cast 不具備去除const功能 const cast 適用於將常指標轉換為普通...

C 筆記整理(型別轉換)

string mygoddess mygoddess char mywife mygoddess 兄弟,編譯器報錯計算機裡無論什麼型別,最根本都是一些0和1組成的。變數的含義是通過翻譯這些0和1來告訴你們。byte s 10 int i s 型別 可以安全的轉換為 byte short,ushort...

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...