C++ Type Casting

Old-style cast

C 風格的舊式轉型,在 C++ 裡不建議使用。

1
(T)expr

將 expr 轉成 type T。

C++-style cast

C++ 的新型轉型有四種:

1
const_cast<T>(expr)

將 const 轉成 non-const,只有這種轉型可以去掉 const。

1
dynamic_cast<T>(expr)

主要用來做 safe downcasting(將 base class pointer 轉成 derived class pointer),會在 runtime 判斷 object/expr 是否屬於 T 的繼承架構才進行轉型。轉型成功會傳回 address,失敗傳回 NULL。

因為要判斷 object 是否屬於繼承架構,dynamic_cast 是執行效率低、成本大的 casting。

1
reinterpret_cast<T>(expr)

少用。做低階轉型,例如將 int* 轉成 int。實際結果取決於 compiler,因此不可移植、無法跨平台。

1
static_cast<T>(expr)

強制轉型,就像舊式轉型,如將 non-const 轉為 const、int 轉為 double 等。也可以用來將 base class pointer 轉成 derived class pointer,但比較不安全。

Ref