以下資料內容來自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

創作者介紹
創作者 sky 的頭像
sky

skybow

sky 發表在 痞客邦 留言(0) 人氣()