C++四種cast


1. c風格強制轉換

int a=1;
char b=(char)a;

 這種轉換適用於面向過程的沒有類的概念的c語言的轉換,然而這樣的轉換符也能不分青紅皂白的應用於類和類的指針,沒有安全檢查。

2. const_cast

  用法:const_cast<type_id> (expression)

  用於修改類型的const或volatile屬性,一般用於強制消除對象的常量性,c中不提供消除這const的機制

3. static_cast

  用法:static_cast<type_id> (expression)

  該轉換和c風格的轉換很類似,沒有運行時類型檢查,所以無法保證轉換的安全性。主要有以下幾種用法:

  (1)用於基本數據類型,或者non_const到const(反過來必須用const_cast)

  (2)把空指針轉換為目標類型的指針

  (3)將任何類型的表達式轉換為void類型

  (4)可以將子類類型的指針轉換為父類類型的指針(這種轉換的安全性需要開發人員來保證)

4. dynamic_cast

  用法:dynamic_cast<type*>(expression)

  他只用於對象和引用,主要用於執行安全的向下轉型,他可以將指向子類的父類指針轉換為子類指針,但是要求父類有虛函數,如果轉換為指針類型失敗則返回NULL,如果是引用類型轉換失敗則跑出bad_cast的異常

5. reinpreter_cast

  用法:reinpreter_cast<type_id> (expression)

  type_id可以是指針,引用,算術類型,函數指針或者成員指針,這個操作符可以在非相關的類型之間轉換,操作只是簡單的從一個指針到別的指針的值得二進制拷貝,在類型之間指向的內容不作任何類型的檢查和轉換。

note:關於static_cast 和 dynamic_cast的區別:

a. static在轉換時不進行安全性檢查,完全需要開發者自己考慮, dynamic 在轉換的時候會進行安全性檢查,如果是指針類型的轉換失敗返回NULL,如果是引用類型的轉換失敗,則跑出bad_cast 異常。

b. static主要是用於值類型之間的轉換,而dynamic只能用於對象的指針和引用的cast,dynamic是向下的轉換,而且要求父類有虛函數,否則會編譯出錯。

 


免責聲明!

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



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