舊式轉換型別
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.當在...