C++中,有哪4種與類型轉換相關的關鍵字?各有什么特點?應該在什么場合下使用?


C++中,四個與類型轉換相關的關鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast。

static_cast

特點:靜態轉換,在編譯處理期間。
應用場合:主要用於C++中內置的基本數據類型之間的轉換,但是沒有運行時類型的檢測來保證轉換的安全性。

  1. 用於基類和子類之間的指針或引用之間的轉換,這種轉換把子類的指針或引用轉換為基類表示是安全的;進行下行轉換,把積累的指針或引用轉換為子類表示時,由於沒有進行動態類型檢測,所以是不安全的。
  2. 把void類型的指針轉換成目標類型的指針(不安全)。
  3. 不能用於兩個不相關的類型轉換。
  4. 不能把const對象轉換成非const對象。

const_cast

特點:去常轉換,編譯時執行。
應用場合:const_cast操作不能在不同的種類間轉換。相反,它僅僅把它作用的表達式轉換成常量。它可以使一個本來不是const類型的數據轉換成const類型的,或者把const屬性去掉。 

reinterpret_cast


特點: 重解釋類型轉換
應用場合:它有着和c風格強制類型轉換同樣的功能;它可以轉化任何的內置數據類型為其他的類型,同時它也可以把任何類型的指針轉化為其他的類型;它的機理是對二進制進行重新的解釋,不會改變原來的格式。

 

dynamic_cast < type-id > ( expression )
該運算符將expression轉換成type_id類型的對象。type_id必須是類的指針,類的引用或者空類型的指針。
  a、如果type_id是一個指針類型,那么expression也必須是一個指針類型,如果type_id是一個引用類型,那么expression也必須是一個引用類型。
  b、如果type_id是一個空類型的指針,在運行的時候,就會檢測expression的實際類型,結果是一個由expression決定的指針類型。
  c、如果type_id不是空類型的指針,在運行的時候指向expression對象的指針能否可以轉換成type_id類型的指針。
  d、在運行的時候決定真正的類型,如果向下轉換是安全的,就返回一個轉換后的指針,若不安全,則返回一個空指針。
  e、主要用於上下行之間的轉換,也可以用於類之間的交叉轉換。上行轉換時和static_cast效果一樣,下行轉換時,具有檢測功能,比static_cast更安全。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM