C++中的類型轉換

1.const_cast安全

   看見const,你們第一反映就是關鍵字,對這個類型裝換和const關鍵字相關。這個類型轉換用來捨棄變量的不可變特性。實際在過程當中,其實咱們不準要使用這個類型轉換。可是可能在使用第三方庫的時候不如你所願,庫對你是不可見的,因此你須要這個轉換。函數

2.static_cast性能

  static_cast是咱們使用的最多的類型轉換。它顯示地執行C++語言直接支持的轉換,好比int轉換爲double。對於自定義的類類型,只要提供了關鍵的構造函數或者轉換例程也能夠進行顯示的轉換。spa

   static_cast能夠用於指針和引用,可是不能用與對象自己。很遺憾,它不進行類型檢測,第四中介紹的類型轉換會進行類型檢測。指針

3.reinterpret_cast對象

  reinterpret的中文釋義爲從新解釋,你可想而知,這個轉換是多麼的強大,你能夠從新解釋一個東西。兩個指針指向的對象能夠沒有繼承層次,你能夠裝換,固然應用也會能夠的,即便他們之間什麼關係也沒。這個關鍵字常常被用來將指針轉換爲void*其實這個過程static_cast也能夠)以及逆過程。繼承

   你使用它將指針轉換成int和int裝換指針。雖然在某些狀況下能夠,可是移植行不好,好比在64位平臺,指針是64位,而int多是32位。io

4.dynamic_cast編譯

   dynamic釋義動態的。它爲繼承層次結構內的類型提供運行時檢測,須要RTTI(real time type infomation)支持。它能夠裝換指針和引用,在運行時檢測對象類型,若是轉換沒有意義,對於指針返回一個空指針,對於引用拋出一個ast

bad_cast異常。

    因爲對象運行時類型信息存儲在對象的虛表中,爲了可使用dynamic_cast,須要類擁有一個虛函數。沒有虛表的話,嘗試使用它,對獲得一個編譯錯誤。

      使用static_cast和reinterpret_cast均可以沿着繼承層次向下轉型。不過dynamic_cast進行運行時檢測,可能性能有那麼一丁點影響,不過很安全

相關文章
相關標籤/搜索