C 基礎語言之(三C 中四種cast轉換)

2021-09-29 12:46:34 字數 2223 閱讀 4605

說起型別轉換,我們常見的就是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.用於基本資料型別之間的轉換,如...