C++類型轉換

一、類型強轉 type cast

類型轉換有C風格,也有C++風格的。C風格的類型轉換簡單,可以在任意類型之間轉換,比如可以將一個指向const對象的指針轉換成指向非const對象的指針,或者將一個指向基類對象的指針轉換成指向派生類對象的指針,C語言對不同種類的轉換不加區分,還有一個缺點就是,C風格的轉換是括號加上一個標識符組成,不容易查找。C++爲了克服這些缺點,引進了4個新的強制類型轉換操作符。

1. 靜態類型轉換,static_cast<目標類型> (標識符)

在一個方向上可以作隱式轉換,在另外一個方向上就可以作靜態轉換。

2. 重解釋類型轉換,reinterpret_cast<目標類型> (標識符)

在雙方向上都不可以隱式類型轉換的,則需要重解釋類型轉換。

3. 脫常類型轉換,const_cast<目標類型> (標識符)

目標類型只能是指針或引用,用來移除對象的常量性(cast away the constness)。

使用 const_cast 去除 const 限定的目的不是爲了修改它的內容,通常是爲了函數能夠接受這個實際參數。

const 常變量(補充):C++中 const 定義的變量稱爲常變量。變量的形式,常量的作用,常用於取代 #define 宏常量。

4. 動態類型轉換,dynamic_cast<目標類型> (標識符)

用於多態中的父子類之間的強轉,只用於含有虛函數的父子類中。

二、type cast安全檢查對比

  1. static_cast,在一個方向上可以作隱式轉換的,在另外一個方向上可以作靜態轉換。發生在編譯階段,編譯期檢查,不保證後序使用的正確性。
  2. reinterpret_cast,無任何檢查,既不在編譯器期也不在運行期進行檢查,安全性完全由程序員決定。
  3. dynamic_cast,dynamic_cast 一種運行時的類型轉化方式,所以要在運行時作轉換判斷。在運行期檢查,檢查指針所指類型,然後判斷這一類型是否與正在轉換成的類型有一種 “is a”的關係,如果是,dynamic_cast 返回對象地址。如果不是,dynamic_cast 返回 NULL。dynamic_cast 常用多態繼承中,判斷父類指針的真實指向。

三、相關補充

https://www.cnblogs.com/Allen-rg/p/6999360.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章