以下資料內容來自http://blog.sasajun.net/2009/09/19/c-plus-transfer-type/
在 C++ 中有四個新的強制轉型關鍵字
- reinterpret_cast
- static_cast
- dynamic_cast
- const_cast
reinterpret_cast
- 使用這個強制轉型一切東西。可以使用它把 void 指標變成浮點數; 或把字串轉變成指標 etc…
- 避免使用 reinterpret_cast,因為它是告訴編譯器強制轉型,不管後果如何,除非編譯器建議你這麼做。
static_cast
- 使用這個強制轉型來「安全」包裝
- 把衍生類別指標轉變為基礎類別指標(稱之向上強制轉型)
- 使用它進行固有類型的轉換(將整數加在浮點數上時, 將整數變成浮點數)
- 使用 static_cast 把 void 指標轉變成有用的東西
- 編譯器不會讓你在真的很危險的東西上使用 static_cast, 為了盡可能安全地強制轉型, 請使用 static_cast; 除非編譯器說必須使用 reinterpret_cast, 否則不要使用 reinterpret_cast
dynamic_cast
使用這個來進行動態向下強制轉型(把基礎類別指標轉換成衍生類別)
- 換句話說, 使用 dynamic_cast 告訴編譯器, 「這個基礎類別指標真的有指到衍生物件上嗎?」 如果有, 編譯器會傳給你該衍生物件指標, 否則回傳 NULL 指標
- 延伸閱讀:進行執行時期型態辨識 RTTI 介紹
const_cast
- 使用這個關鍵字從某物加上或移除「常數性」(const-ness)
- 舉例來說, 如果需要將一個常數類別變為非常數, 你可以使用這個關鍵字, 反之你也可以使用它, 使某東西暫時變成 const
- 基本上 const 就是為了避免讓 user 改變某些數值( 變數值, 記憶體位址 ),所以在使用 const_cast 關鍵字必須非常小心思考是否轉成非 const 類型的後果。
[其他參考文章]
http://blog.sina.com.tw/jspcity/article.php?entryid=576092%3E
全站熱搜