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