1. 程式人生 > >C++轉型小結

C++轉型小結

轉型一直不陌生,在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++中說這個方法一般是在高階語法中才出現,且在目前公司專案中也沒看到相應應用,暫時性忽略一下,瞭解就好)