C 中的四種型別轉換

2021-10-10 05:40:32 字數 1242 閱讀 4869

static_cast < type-id > ( expression )

1)  基本型別之間的轉換

如把int轉換成char,這種轉換的安全性也要開發人員來保證。 但不能用於不同指標型別之間的型別轉換。static_cast更有利於檢查出危險的型別轉換。

float af = 3.0f;

double* pdouble = static_cast(&af); //編譯器不允許。   用暴力的

interpret_cast不報錯。

static_cast起到安全作用的乙個例子:

ca* pa = new ca();

cb* pb = (cb*)pa; //c 風格的位址轉換

pb->mval=7; //ca和cb是兩個不同的類,這樣轉換比較危險;

cb* pb = static_cast(pa);//編譯器直接報錯,從而避免了後續的執行災難。

2)有繼承關係的子類與父類之間的指標或引用的轉換

進行上行轉換(把派生類的指標/引用轉換成基類的指標/引用)是安全的;

進行下行轉換(把基類指標/引用轉換成派生類的指標/引用)時,由於沒有動態型別檢查,所以是不安全的。

3) 空型別指標與其他型別的指標進行轉換

這種使用場景容易出錯,因為有可能出現未知的轉換結果,要保證轉換的正確性就必須保證轉換後所得的型別就是指標原先的型別:

int i = 0;

void *vp = &i;

int *pint = static_cast(vp);

*pint = 3;

std::cout << i << std::endl;

e.g. int位址型別轉換為void*, 然後又將該void*轉為char位址,並操作該char*位址,產生了非預期的東東:

int i=256;

void *vp=&i;

char *p=static_cast(vp);

*p=4;

cout

dynamic_cast必須用在具有虛函式的繼承體系中,否則編譯器回直接報錯(我實驗了)

dynamic_cast不是強制型別轉換,其帶有一些諮詢性質,如果不能轉換則回返回null。

四個轉換符中唯一的乙個rtti操作符,提供執行時型別檢查;

ref:

c 中四種型別轉換

2.型別轉換 c 中的型別轉換 四種型別裝換符 static cast 基礎資料型別的轉換和繼承中父類與子類,指標與引用裝換 dynamic cast 通常在基類和派生類之間轉換時使用 const cast 主要針對const的轉換 reinterpret cast 用於進行沒有任何關聯之間的轉換,...

C 中的四種型別轉換

static cast,dynamic cast,const cast,reinterpret cast是c 中的四種型別轉換 用於將const變數轉為非const 用於各種隱式轉換,比如非const轉const,void 轉指標等 static cast能用於多型向上轉化,如果向下轉能成功但是不安...

c 四種型別轉換

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