隱式轉換: 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支援執行時型別識別。任何具有...