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:轉換函式指標的程式碼是補課移植的