細說C 型別轉換操作符

2021-06-23 08:02:11 字數 1559 閱讀 6206

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

下面我們就來看看c++提供的四種命名的強制轉換操作符的具體功能和用法。

1.const_cast

2.static_cast

3.reinterpret_cast

4.dynamic_cast

這四個操作符的使用方法是相同的,都是cast-name(expression),type是被轉換值expression的目標型別。

下面看看這四個操作符分別的應用場合。

1.const_cast

顧名思義,const_cast就是將表示式的const性質去掉,例如

[cpp] 

char* string_copy(char* s) 

int main() 

上例只是說明問題,並不實現功能。

要記住,const_cast只能用來新增或刪除const特性,同時新增或刪除特性也只能用const_cast。

2.static_cast

這個用途比較廣泛,編譯器隱式執行的任何型別轉換都可以有static_cast完成。

另外,static_cast多用於將乙個void*型別的指標強制轉換為原來的指標型別,例如:

[cpp] 

double d = 12; 

void* p = &d; 

double* pd = static_cast(p); 

cout << *pd << endl; 

輸出結果為12,說明轉換後依然還是指向同乙個位址。

3.reinterpret_cast

這個操作符很難看,也很難記,為什麼呢,因為危險性比較大,設計成這個樣子就是為了讓我們盡量不用它,它用於對指標之間進行轉換,例如:

[cpp] 

int* ip; 

char* pc = reinterpret_cast(ip); 

string str(pc); 

雖然可以編譯通過,但是卻會帶來嚴重的執行時錯誤,所以,要盡量避免reinterpret_cast的使用。

4.dynamic_cast

dynamic_cast用於子類和父類之間的轉換,它可以將父類的指標或引用轉換為子類的指標或引用。

dynamic_cast與前三種強制轉換不同,它涉及執行時型別檢查。如果繫結到引用或指標的型別物件不是目標型別的物件時,則dynamic_cast失敗。當用於指標的轉換失敗時,dynamic_cast的結果為0,用於引用的轉換失敗時,則丟擲乙個bad_cast異常。

可用下面例子所用的結構對轉換進行檢測:

指標轉換:

[cpp] 

if(derived *derviedptr = dynamic_cast(baseptr) 

else 

引用轉換:

[cpp] 

void f(const base& b) 

catch (bad_cast) 

} 至此,轉換操作符介紹完畢。

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 型別轉換操作符 dynamic cast

dynamic cast 顧名思義是支援動態的型別轉換,即支援執行時識別指標或引用所指向的物件。dynamic cast 用於c 類繼承多型間的轉換,分為 子類向基類的向上轉型 up cast 基類向子類的向下轉型 down cast 其中向上轉型不需要借助任何特殊的方法,只需用將子類的指標或引用賦...