C++中,有哪四種與類型轉(zhuǎn)換相關(guān)的關(guān)鍵字?這些關(guān)鍵字各有什么特點?應(yīng)該應(yīng)用在什么場合?

C++中,四個與類型轉(zhuǎn)換相關(guān)的關(guān)鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast。

static_cast

特點:靜態(tài)轉(zhuǎn)換,在編譯處理期間。
應(yīng)用場合:主要用于C++中內(nèi)置的基本數(shù)據(jù)類型之間的轉(zhuǎn)換,但是沒有運行時類型的檢測來保證轉(zhuǎn)換的安全性。

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

const_cast

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

reinterpret_cast

特點: 重解釋類型轉(zhuǎn)換
應(yīng)用場合:它有著和c風(fēng)格強制類型轉(zhuǎn)換同樣的功能;它可以轉(zhuǎn)化任何的內(nèi)置數(shù)據(jù)類型為其他的類型,同時它也可以把任何類型的指針轉(zhuǎn)化為其他的類型;它的機理是對二進制進行重新的解釋,不會改變原來的格式。

dynamic_cast < type-id > ( expression )

該運算符將expression轉(zhuǎn)換成type_id類型的對象。type_id必須是類的指針,類的引用或者空類型的指針。
1、如果type_id是一個指針類型,那么expression也必須是一個指針類型,如果type_id是一個引用類型,那么expression也必須是一個引用類型。
2、如果type_id是一個空類型的指針,在運行的時候,就會檢測expression的實際類型,結(jié)果是一個由expression決定的指針類型。
3、如果type_id不是空類型的指針,在運行的時候指向expression對象的指針能否可以轉(zhuǎn)換成type_id類型的指針。
4、在運行的時候決定真正的類型,如果向下轉(zhuǎn)換是安全的,就返回一個轉(zhuǎn)換后的指針,若不安全,則返回一個空指針。
5、主要用于上下行之間的轉(zhuǎn)換,也可以用于類之間的交叉轉(zhuǎn)換。上行轉(zhuǎn)換時和static_cast效果一樣,下行轉(zhuǎn)換時,具有檢測功能,比static_cast更安全。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容