前言
這篇文章總結的是c++中的型別轉換,這些小的知識點,有的時候,自己不是很注意,但是在實際開發中確實經常使用的。俗話說的好,不懂自己寫的**的程式設計師,不是好的程式設計師;如果乙個程式設計師對於自己寫的**都不懂,只是知道一昧的的去使用,終有一天,你會迷失你自己的。
c++中的型別轉換分為兩種:
1.隱式型別轉換;
2.顯式型別轉換。
而對於隱式變換,就是標準的轉換,在很多時候,不經意間就發生了,比如int型別和float型別相加時,int型別就會被隱式的轉換位float型別,然後再進行相加運算。而關於隱式轉換不是今天總結的重點,重點是顯式轉換。在標準c++中有四個型別轉換符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面將對它們一一的進行總結。
static_cast
static_cast的轉換格式:static_cast (expression)
將expression轉換為type-id型別,主要用於非多型型別之間的轉換,不提供執行時的檢查來確保轉換的安全性。主要在以下幾種場合中使用:
1.用於類層次結構中,基類和子類之間指標和引用的轉換;
當進行上行轉換,也就是把子類的指標或引用轉換成父類表示,這種轉換是安全的;
當進行下行轉換,也就是把父類的指標或引用轉換成子類表示,這種轉換是不安全的,也需要程式設計師來保證;
2.用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum等等,這種轉換的安全性需要程式設計師來保證;
3.把void指標轉換成目標型別的指標,是及其不安全的;
注:static_cast不能轉換掉expression的const、volatile和__unaligned屬性。
dynamic_cast
dynamic_cast的轉換格式:dynamic_cast (expression)
將expression轉換為type-id型別,type-id必須是類的指標、類的引用或者是void *;如果type-id是指標型別,那麼expression也必須是乙個指標;如果type-id是乙個引用,那麼expression也必須是乙個引用。
dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。在多型型別之間的轉換主要使用dynamic_cast,因為型別提供了執行時資訊。下面我將分別在以下的幾種場合下進行dynamic_cast的使用總結:
1.最簡單的上行轉換
比如b繼承自a,b轉換為a,進行上行轉換時,是安全的,如下:
複製** **如下:
using namespace std;
class a
; class b : public a
; int main()
int m_ia;
}; int main()
{ const ca *pa = new ca;
// pa->m_ia = 100; // error
ca *pb = const_cast
四種強制型別轉換
強制型別轉換時有一定風險的,例如把整形轉成指標,基類指標轉成派生類指標,常量指標轉成非常量指標等。c語言中的強制型別轉換 type cast 有顯式和隱式兩種,顯式一般就是直接用小括號強制轉換。沒有從形式上體現出轉換功能和風險的不同。低風險的型別轉換,沒有執行時型別檢查來保證轉換的安全性。1 用於類...
C 四種強制型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種強制型別轉換
1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...