C 的型別轉換操作符

2021-08-19 21:55:33 字數 1428 閱讀 5294

c++中提供了四種型別轉換操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast。

1.static_cast.

可以完全代替c風格的型別轉換實現基本型別轉換。也可以將父類指標轉換成子類指標,將子類指標轉換為父類指標。如果父類指標本身就指向乙個子物件,則不存在安全性問題。

class base(){};

class derived:public base(){};

base *b1=new base;

base *b2=new derived;

derived *b2d1=static_cast(b1);轉換成功(不安全)

derived *b2d2=static_cast(b2);轉換成功

2.dynamic_cast.

dynamic_cast只能用於物件指標之間的型別轉換,可以將父類指標轉換為子類指標,也可以將子類指標轉換為父類指標。dynamic_cast並不等同於satic_cast,dynamic_cast在將父類指標轉換為子類指標的過程中,需要對其背後的物件型別進行檢查,以保證型別完全匹配。只有當乙個父類指標指向乙個子類物件,並且父類中包含虛函式時,使用dynamic_cast將父類指標轉換成子類指標才會成功,否則返回空指標,如果是引用則丟擲異常。

class base };

class derived:public base{};

base *b1=new base;

base *b2=new derived;

derived *b2d1=dynamic_cast(b1);轉換失敗,返回null

derived *b2d2=dynamic_cast(b2);轉換成功

derived &b2d3=dynamic_cast(*b1);轉換失敗,丟擲異常

derived &b2d4=dynamic_cast(*b2);轉換成功

3.const_cast.

const_cast可以在轉換過程中增加或刪除const屬性。一般情況下,無法將常量指標直接賦給普通指標,但是通過const_cast可以移除常量指標的const屬性,實現const指標到非const指標的轉換。

class test{};

const test *t1=new test;

test *t2=const_cast(t1);

4.reinterpret_cast.

reinterpret_cast可以將一種型別的指標直接轉換為另一種型別的指標,不論兩個型別之間是否有繼承關係。此外,interpret_cast可以把乙個指標轉換為乙個整數,也可以把乙個整數轉換成乙個指標。reinterpret_cast還經常用在不同函式指標之間的轉換。

class a{};

class b{};

a *a=new a;

b *a2b=reinterpret_cast(a);

C 型別轉換操作符 cast operator

dynamic cast 用以轉換多型型別 polymorphic type 建立執行時檢查將保證轉換的有效性。如果該轉換不是安全的,則丟擲乙個bad cast異常。static cast 用以轉換非多型型別。沒有執行時檢查。const cast 用以除去乙個物件的常態 constness 和易失態...

C 過載型別轉換操作符

在需要做資料型別轉換時,一般顯式的寫法是 cpp view plain copy font size 18px type1 i type2 d i type1 d 顯式的寫型別轉,把d從type2型別轉為type1型別 這種寫法不能做到無縫轉換,也就是直接寫 i d,而不需要顯式的寫 type1 來...

細說C 型別轉換操作符

c 語言雖然相容c,也支援c語言的型別轉換用法,就是將型別用圓括號括起來,這種轉換可視性比較差,難以跟蹤錯誤的轉換。c 提供了命名的強制轉換操作符,畢竟轉換有時是不安全的,所以使用命名轉換操作符可以根據所使用的轉換操作符可以判斷風險級別。下面我們就來看看c 提供的四種命名的強制轉換操作符的具體功能和...