C 型別轉換

2021-10-07 07:56:12 字數 3163 閱讀 8572

舊式轉換型別

c風格的強制型別轉換:type b = (type)a;

例:int i=48;

char n = (char) i;

新式型別轉換c++風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用

格式:type b = 型別操作符(a);

型別操作符有:static_cast, reinterpret_cast, dynamic_cast, const_cast;

靜態型別轉換(斯文的勸導,溫柔的轉換), 如 int 轉換成char;

主要用法:

1.用於類層次結構中父類和子類之間指標或引用的轉換,上行指標或引用(子類到父類)轉換安全,下行不安全;

2.用於基本資料型別之間的轉換,如把int轉換成char, 把int轉換成enum,這樣轉換的安全性也要開發者來保證;

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

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

#include

using

namespace std;

//構建乙個動物抽象類

class

animal

;//構造乙個基於animal類的cat子類,繼承方式為公有

class

cat:

public animal };

//構造乙個基於animal類的dog子類,繼承方式為公有

class

dog:

public animal };

intmain

(void

)

重新解釋型別(掛羊頭,賣狗肉)不同型別間的互轉,數值與指標間的互轉;

用法:type b = reinterpret_cast(a);

type必須是乙個指標,引用,算術型別,函式指標;

注意:濫用reinterpret_cast運算子可能很容易帶來風險,除非所需轉換本身是低階的,否則應使用其他強制轉換運算子之一;

#include

using

namespace std;

//構建乙個動物類

class

animal};

//構造乙個基於animal類的cat子類,繼承方式為公有

class

cat:

public animal };

//構造乙個基於animal類的dog子類,繼承方式為公有

動態型別轉換:

1.將乙個父類物件指標cast到繼承類指標,dynamic_cast 會根據父類指標是否真正指向繼承類的指標來做相應處理,失敗返回null,成功返回正常cast後的物件指標;

2.將乙個父類物件引用cast繼承類物件,dynamic_cast 會根據父類物件是否真正屬於繼承類來做相應的處理.失敗丟擲異常bad_cast;

注意:

dynamic_cast在將父類cast到子類時,父類必須要有虛函式;

#include

using

namespace std;

//構建乙個動物類

class

animal

;//構造乙個基於animal類的cat子類,繼承方式為公有

class

cat:

public animal

void

play()

};//構造乙個基於animal類的dog子類,繼承方式為公有

去除const 屬性,(僅針對於指標和引用)

#include

using

namespace std;

void

demo

(const

char

* ptr)

void

demo

(const

int p)

intmain

(void

)

型別轉換使用建議1.static_cast靜態型別轉換,編譯的時c++編譯器會做編譯時的型別檢查;隱式轉換;

基本型別轉換,父子類之間合理轉換;

2.若不同型別之間,進行強制型別轉換,用reinterpret_cast<>() 進行重新解釋;

建 議:

c語言中 能隱式型別轉換的,在c++中可用 static_cast<>()進行型別轉換。因c++編譯器在編譯檢查一般都能通過;c語言中不能隱式型別轉換的,在c++中可以用 reinterpret_cast<>() 進行強制型別解釋。

總結:static_cast<>()和reinterpret_cast<>() 基本上把c語言中的 強制型別轉換給覆蓋,注意reinterpret_cast<>()很難保證移植性。

3.dynamic_cast<>(),動態型別轉換,安全的虛基類和子類之間轉換;執行時型別檢查;

4.const_cast<>(),去除變數的唯讀屬性 ;

最後的忠告:

程式設計師必須清楚的知道: 要轉的變數,型別轉換前是什麼型別,型別轉換 後是什麼型別,轉換後有什麼後果。

c++大牛建議:

一般情況下,不建議進行型別轉換;避免進行型別轉;

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.當在...