1. 程式人生 > >C++中的型別轉換,以及與C的區別

C++中的型別轉換,以及與C的區別

程式設計的時候,型別轉換在某些緊要的關頭是必需品。

C風格的型別轉換,相對C++風格的型別轉換來說,比較粗魯,C風格的型別轉換,能允許任何型別之間進行轉換,在編寫C++程式時是也可以使用的,要進行精確的型別轉換時,這是一個優點。但是,正是這樣的優點,使C風格的型別轉換,在編寫程式時,容易出現型別不明,轉換失誤,並且在程式語句中難以識別,可讀性較差,在編寫C++程式時,建議使用C++中的型別轉換。

C++中的型別轉換操作符有四個,分別是:static_cast,const_cast,dynamic_cast,reinterpret_cast

C的型別轉換使用格式為:(type)expression

C++的型別轉換格式為:static_cast<type>(expression)

static_cast:此操作符的功能上基本與C風格的型別轉換一樣強大,含義也相同,但是功能上有一定的限制:

比如:1.不能吧struct轉換層int,或者,double轉換成指標型別等

2.不能去除const屬性,需要用另一個型別轉換操作符const_cast

const_cast:用於型別轉換掉表示式const或者volatile屬性,其他型別的轉換操作,在執行語句時,將被拒絕

其最普遍的用途就是轉換掉const屬性

dynamic_cast:被用於安全的沿著類的繼承關係下進行的型別轉換

可以用過返回值判斷其型別轉換是否成功:

1.當對指標型別操作時,返回空指標表示失敗

2.當對應用物件進行型別轉換時,將丟擲異常表示失敗

要注意的點是:

1.該型別轉換無法轉換const修飾的型別

2.不能用於缺乏虛擬函式的型別上

ps:沒有繼承關係的建議使用static_cast進行轉換,若有const修飾的,建議用const_cast進行轉換

reinterpret_cast:轉換結果幾乎都是執行期定義,因此,使用該型別操作符進行轉換的程式碼將降低可移植性

該型別轉換操作符常用與函式指標型別之間進行轉換

PS:轉換函式指標的程式碼是補課移植的