C++轉型小結
阿新 • • 發佈:2019-02-17
轉型一直不陌生,在java裡面用的也比較多,直接"()"一下就搞定了,在C++中,部分轉型也可以直接用這種方法搞定,在effective c++中,作者將其歸納為舊式轉型。
既然有舊式,那就有新式,新式是形如xx_cast的東西。cast比較糾結,雖然平常用的也還算多,但一直沒總結,也就老忘了各自區別和具體用法,接下來大概總結一下。
- const_cast
用來移除物件的常量性(是移除!不是新增),也是唯一具有此功能的轉型操作符(C++style)。 - dynamic_cast
用來執行安全向下轉型操作,也可以用來判斷某個物件是否為另一個物件的派生類。舊式語法無法執行這個操作,缺點是耗費的執行成本比較高。 - static_cast
用來強制隱式轉換,如將non-const轉為const、將int轉為double等。 - reinterpret_cast
用來處理無關型別之間的轉換,它會產生一個新的值,這個值會和原始引數有著完全相同的位元位。幾乎任何型別的指標之間都可以互相轉換,都不會編譯錯誤,但是使用它很容易導致程式的不安全,只有將轉換後的型別值轉換回到其原始型別,這才是正確使用reinterpret_cast方式。 - (Effective C++中說這個方法一般是在高階語法中才出現,且在目前公司專案中也沒看到相應應用,暫時性忽略一下,瞭解就好)