c 強制轉換

2021-06-08 19:20:16 字數 1121 閱讀 8191

隱式轉換: char->int

顯示轉換:

c風格轉換: base* b=new test; test* t=(test*)b;

c++風格:

static_cast: 編譯時檢查,如果不是派生關係,則編譯錯誤

dynamic_cast:執行時檢查,如果不是派生關係,則返回null---rtti

reinterpret_cast: 二進位制轉換,猜測等價於c風格轉換

class test1:public base

void test()

};class test2

void test1()

private:

int a;

};int main()

以上方法編譯的時候不出錯,執行的時候也不會中斷。

總結: 不用c風格強制轉換

base* b=new test1();

test2* t=dynamic_cast(b);//為空

t->test();

base* b=new test1();

test2* t=static_cast(b);//執行ok,但是邏輯上有錯

t->test();

綜上,只用dynamic_cast,  畢竟static_cast不安全。

///dynamic_cast:   通常在基類和派生類之間轉換時使用;

const_cast:  主要針對const和volatile的轉換. 

static_cast: 一般的轉換,如果你不知道該用哪個,就用這個。 

reinterpret_cast:  用於進行沒有任何關聯之間的轉換,比如乙個字元指標轉換為乙個整形數。

根據rtti(run-time type identification,通過執行時型別識別),

static_cast 用於數值型別之間的轉換,也可以用於指標之間的轉換,編譯的已經確定好,效率高,但須要自己保證其安全性。

dynamic_cast 用於有繼承關係的類之間轉換,是基於rtti資料資訊的,執行時檢測,安全,但是效率低。

class a };

class b:publica;

class d:publica;

voidfoo()

url:

C 強制轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...

c 強制轉換

c 強制轉換總結 c語言的強制型別轉換,主要用於基礎資料之間的轉換 語法規則 type id expression 轉換格式1 type id expression 轉換格式2 c 除了c語言的強制型別轉換外,新增了四種強制型別轉換 static cast dynamic cast const ca...

C 強制轉換

c 中經常會出現資料的型別轉換,例如陣列轉換為指標,int轉換為long,這些都屬於隱式轉換,更重要的是c 提供了四種強制的顯示型別轉換 static cast,dynamic cast,const cast和reinterpret cast。其中dynamic cast支援執行時型別識別。任何具有...