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
- 《Effective C++》
- http://openhome.cc/Gossip/CppGossip/dynamicCast.html