c 型別轉換

2021-08-30 08:53:55 字數 1899 閱讀 3562

型別轉換

static_cast

這個就是c語言的隱式轉換

reinterpret_cast

這個就是任意型別的轉換,但是不能忽略 cv限定符

const_cast

這個只能去掉頂層const 和 volatile , 並且必須原始物件是 非const物件才有效,如果原始物件是const 物件,那麼經過const_cast 去掉 const 後,修改物件會發生未定義行為。

dynamic_cast

dynamic_cast (exp)

dynamic_cast 常用於多型之間的指標或引用的轉換。如果用於非多型類之間的轉換會報編譯錯誤,它用於執行期的型別轉換。可使用的轉化如下

非 const 型別的指標或引用 轉化為 const 型別的指標或引用

賦值相容規則之間的轉換(要求 base 是dervied 的唯一public 許可權基類), 這個 static_cast 同樣可以做到

多型類的指標/引用的轉換。這裡分為上行和下行轉換和void*轉換。、

void*

若 表示式 是指向多型型別的指標,且 新型別 是到 void 的指標,則結果是指向 表示式 所指向或引用的最終派生物件的指標。

下行轉換

dynamic(exp)

從基類轉換到派生型別

1.若 exp 指向最終的派生類物件,且在該物件的繼承鏈中,exp 是 new_type 的public 基類,且只有new_type 派生了 exp 指向物件的型別,那麼轉換 new_type 成功

struct base ;

struct dervied : public base;

struct dervied2 ;

struct finaldervied : public derived, public dervied2 ;

base* b = new finalderived();

dervied2* d2 = dynmaic_cast(b); // success

側向轉化

dynamic < derviedtype > (exp)

exp 指向物件的型別是 最終派生型別的public 基類,且 derviedtype 的基類 與 最終派生類中的其他 derviedtype 無歧義基類,那麼可以轉化。從下面**看 base 和 base2 沒有相關聯的關係,但是通過dynamic_cast 的 sidecast 可以發生轉換

#include struct base 

};struct base2

};struct base3 : public base ;

struct dervied : public base2, public base3 ;

int main()

return 0;

}

**
#include struct v ;  // 必須為多型以使用執行時檢查的 dynamic_cast

};struct a : virtual v {};

struct b : virtual v

};struct d : a, b };

struct base };

struct derived: base };

int main()

base* b2 = new derived;

if(derived* d = dynamic_cast(b2))

base* b3 = new derived;

if(const base* b = dynamic_cast(b3))

delete b1;

delete b2;

delete b3;

return 0;

}

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

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

C 型別轉換

在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...

C 型別轉換

型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。型別的自動隱式轉換 c 語言編譯系統提供的內部資料型別的自動隱式轉換規則如下 1.程式在執行算術運算時,低型別可以轉換為高型別。2.在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。3.當在...