1.c++的四種型別轉換
static_cast, dynamic_cast, reinterpret_cast, const_cast
語法格式:
static_cast(expr);
static_cast(expr);
2.型別轉換的運用
(1).類的上下行轉換和交叉轉換
上行轉換: 派生類指標轉換到基類指標。
下行轉換: 基類指標轉換到派生類指標。
reinterpret_cast 可以用於上行轉換也可以用於交叉轉換,並且沒有任何限制條件,但是安全性由程式設計師保證。
static_cast 可以用於上下行轉換,但是在下行轉換的時候不進行型別檢查,所以轉換是不安全的,轉換安全行要由程式設計師保證。
dynamic_cast可以用於上下行轉換,在下行轉換的時候在編譯期間就會進行型別檢查,如果型別檢查失敗編譯就不能通過。dynamic_cast的型別檢查是利用虛函式表裡面的型別資訊,所以如果基類沒有虛函式的話,那就沒有虛函式表,那編譯就不能通過。
ex:class b;
class d:public b{};
int main()
改正的方法只需要在基類和子類有虛函式表就可以了:
class b };
交叉轉換:所謂交叉轉換就是乙個基類有不同的子類,轉換在這個基類的不同子類的物件指標之間進行。
static_cast 不能用於交叉轉換,編譯器會報錯。
dynamic_cast 能用於交叉轉換, 所依賴的仍然是虛函式表裡面的資訊。
ex:
class b };
class d1:public b{};
class d2:public b{};
int main()
dynamic_cast轉換的結果為null的時候:
dynamic_cast 轉換依賴的是虛函式表裡面的資訊,但是在轉換的時候,如果型別不能匹配的話,那麼dynamic_cast 轉換將得到乙個null值。
ex:b *pb = new b;
//pd1的結果會是乙個null值,因為型別不匹配
d1 *pd1 = dynamic_cast(pb);
if(pd1 == null )
//pd2的值也會是乙個null值,因為型別不匹配
d2 *pd2 = dynamic_cast(new d1);
//pb1 不會是乙個null值,因為型別匹配,並且是乙個上行轉換
b *pb1 = dynamic_cast(new d1);
(2)基本型別之間的轉換:
基本型別,比如int, char, short 等之間的轉換是預設完成的,或者通過static_cast 也可以。
ex:int a;
char c = a;
char c1 = static_cast(a);
(3)基本型別指標之間的轉換
基本型別指標之間的轉換只能使用 reinterpret_cast.
ex:char *pchar;
byte *pbyte = reinterpret_cast(pchar);
(4).void* 和 基本型別指標、物件指標之間的轉換
reinterpret_cast肯定是可以的。
static_cast也是可以的,static_cast就是為這個設計的。
ex:byte *pbyte = new byte;
void *pvoid = static_cast(pbyte);
char *pchar = static_cast(pvoid);
dynamic_cast 只能用於 類物件指標到 void*的轉換, 並且要求這個類具有虛函式表。
ex:b *pb;
void *pvoid = dynamic_cast(pb);
pb = dynamic_cast(pvoid);//這裡會報錯,dynamic_cast不允許做這樣的轉換。這裡可以換成 static_cast
(5). 數和指標之間的轉換
數和指標之間的轉換只能使用 reinterpret_cast.
ex:int a=0x1234;
char* pchar = reinterpret_cast(a);
a = reinterpret_cast(pchar);
3.const_cast
const_cast 是用來去除指標或者引用的 const 屬性, 它的作用不是為了修改變數,而是為了能讓函式接受這個變數作為引數。
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
C 的型別轉換
2008 03 15 12 59 強制型別轉換容易引發錯誤,所以被認為是一種醜陋的語法。c 中有乙個觀念 醜陋的語法就應該用醜陋的方式表達。所以,c 的轉換操作符使用 x cast 這種一種繁瑣的形式。目的是為了讓你在使用型別轉換前三思而行,看看是不是又不需要型別轉換的方法或設計。更重要的是,c風格...
C 型別的轉換
型別的轉換c 中型別轉換 顯隱 的機制分為兩種 一 隱式轉換 implicit conversions 二 顯式轉換 explict conversions 隱式轉換不需要指明欲轉變的型別 顯式轉換明確地使用轉換運算子 cast 指定要轉換成哪一種型別。c 允許程式設計師如果對於溢位進行處理 che...