(1)c風格的轉換
(t)expression;(2)c++風格的四種轉換
static_cast(expression);dynamic_cast(expression);
reinterpret_cast(expression);
const_cast(expression);
int a = 1;double d = (double)a;//c風格轉換
一般許多書本會建議使用c++提供的四種型別轉換而不是使用c風格的轉換。
因為c風格的型別轉換有不少的缺點,它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非const物件的指標,把乙個指向基類物件的指標轉換成指向乙個派生類物件的指標,這兩種轉換之間的差別是巨大的,但是傳統的c語言風格的型別轉換沒有區分這些。還有乙個缺點就是,c風格的轉換不容易查詢,他由乙個括號加上乙個識別符號組成,而這樣的東西在c++程式裡一大堆。所以c++為了克服這些缺點,引進了4種新的型別轉換操作符。
static_cast(expression);
最常用的轉換,但是轉換的時候不會檢查型別來保證轉換的安全性。
class base;static_cast本質上是傳統c語言強制轉換的替代品。class derived : public base;
void main()
需要注意的是:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。
dynamic_cast(expression);
該運算子把expression轉換成t型別的物件。
dynamic_cast轉換操作符在執行型別轉換時首先將檢查能否成功轉換,如果能成功轉換則轉換之,如果轉換失敗,如果是指標則反回乙個0值,如果是轉換的是引用,則丟擲乙個bad_cast異常,所以在使用dynamic_cast轉換之間最好使用if語句對其轉換成功與否進行測試。
注意:(1)t必須是類的指標、類的引用或者void *。如果t是類指標型別,那麼expression也必須是乙個指標,如果t是乙個引用,那麼expression也必須是乙個引用。
(2)dynamic_cast轉換符只能用於含有虛函式的類。
class base;};class derived : public base
;void main()
dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。
在類層次間進行上行轉換(子類->子類/基類)時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換(基類->子類)時,dynamic_cast具有型別檢查的功能,比static_cast更安全。
interpret是解釋的意思,reinterpret即為重新解釋,此識別符號的意思即為資料的二進位制形式重新解釋,但是不改變其值。
reinterpret_cast(expression);
t必須是乙個指標、引用、算術型別、函式指標或者成員指標。
該操作符用於將一種型別轉換為另一種不同的型別,比如可以把乙個整型轉換為乙個指標,或把乙個指標轉換為乙個整型,因此使用該操作符的危險性較高,一般不應使用該操作符。
示例:
int i;char *p = "this is a example.";
i = reinterpret_cast(p); //將指標p的值(即位址)轉為int型 【如 0x00b4cd10 -> 11848976】
const_cast(expression);
其中t必須為指標或引用 。
主要是用來去掉const屬性,當然也可以加上const屬性。主要是用前者,後者很少用。
class a;void main()
C 四種cast轉換
c 中四種型別分別為 static cast dynamic cast const cast reinterpret cast 1.const cast 用於將const變數轉換為非const 2.static cast 用於各種隱式轉換,比如非const轉const,void 轉指標等,也可以用於...
C 中四種cast轉換
c 中四種型別轉換是 static cast,dynamic cast,const cast,reinterpret cast 1 static cast 用於各種隱式轉換,例如將非const轉換為const,void 轉指標 將void指標指向任意型別 等,用於多型向上轉化,如果向下轉能成功但是不...
C 基礎語言之(三C 中四種cast轉換)
說起型別轉換,我們常見的就是c中的隱式型別轉換和顯式型別轉換 1.隱式型別轉換 隱式轉換就是系統預設的 不需要加以宣告就可以進行的轉換。在隱式轉換過程中,編譯器無需對轉換進行詳細檢查就能夠安全地執行轉換。int i 1 float f i 2.顯式型別轉換 強制型別轉換 區別在於當向下轉換時如果不顯...