c++的四種強制類型轉換

c++的四種強制類型轉換爲:static_castc++

                                     dynamic_cast程序員

                                     const_cast安全

                                     reinterpret_cast函數

 

c++相對於c的強制轉換能夠提供更好的控制強制轉換過程,容許控制各類不一樣種類的強制轉換。c++中風格是static_cast<type>(content)。它能更清楚的代表它們要幹什麼。程序員也能夠更直觀的當即知道一個強制轉換的目的。spa

 

static_cast:能夠實現c++中內置基本數據類型之間相互轉換
指針

   int C=static_cast<int>(7.889);對象

若是涉及到類的話,static_cast只能在有相互聯繫的類型中進行相互轉換,不必定包含虛函數。編譯

const_cast:其操做不能在不一樣的種類間轉換,相反,它僅僅能把它做用的表達式,轉換常量。它可使一個原本不是const的類型轉換成const類型。,或者把const屬性去掉。ast

reintepret_cast:(從新解釋的計算)有着和C風格的強制轉換一樣的能力。他能夠轉化任何內置的數據類型爲其餘的任何數據類型,也能夠轉化任何指針類型爲其餘類型。他深灰能夠轉化內置的數據類型爲指針,無需考慮類型安或常量的情形。不到萬不得已絕對不用。數據類型

dynamic_cast:(動態的計算)

 (1)其餘三種都是編譯時完成的,,而它是運行時處理的,運行時要進行類型檢查。

 (2)不能用於內置的基本數據類型的強制轉換。

 (3)轉換若是成功的話返回的是指向類指針或引用,轉換失敗的話側翻會NULL。

 (4)使用dynamic_cast進行轉化的基類中必定要有虛函數,不然編譯不經過。

       須要檢測有虛函數的緣由:類中存在虛函數類中存在虛函數,就說明它有想要讓基類指針或引用指向皮勝磊對象的狀況,此時轉換纔有意義。

 (5)類的轉換時:在累的層次間進行上行轉換時,dynamic_cast和static_cast的效果是同樣的,在進行下行轉換時,dynamic_cast具備類型檢查的功能,比static_cast更安全。

相關文章
相關標籤/搜索