c 中4個與型別轉換相關的關鍵字分析

2021-08-19 15:31:46 字數 1099 閱讀 9875

**

static_cast  

reinterpret_cast

dynamic_cast

const_cast

1.**static_cast------運算子完成相關型別之間的轉換**

使用場景:如在同一類層次結構中的乙個指標型別到另乙個指標型別,整型到列舉型別,或者浮點型到整型等。

例:  1,  int m=10;

double n=static_cast < int > m;

2, int * q=static_cast < int* >(malloc(100));

2.**reinterpret_cast------處理互不相關型別之間的轉換**

使用場景:如從整型到指標,一種型別的指標到另一種型別的指標等

例: int a=10;

double* b=reinterpret_cast(a);//b的轉換結果為0x0000000a

3.**dynamic_cast------處理基型別到派生型別的轉換

**(這個說法不是很準確,為了好理解先這麼寫)

使用場景:基類必須有虛函式,即為多型時,可以轉換

例:

class

base

//基類中存在虛函式,故在派生類中存在虛函式指標指向虛函式表。

};class derived:public

base

};int

main()

4,const_cast用來移除變數的const或volatile限定符。

一句話:強制去掉const(或volatile)  必須使用const_cast 。

注:volatile的作用是: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.

簡單地說就是防止編譯器對**進行優化.比如如下**:

a=1;

a=2;

a=3;

a=4;

對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器卻會對上述四條語句進行優化,認為只有a=4(即忽略前三條語句,只產生一條機器**)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器**(產生四條**).

C 中4個與型別轉換相關的關鍵字

static cast const cast dynamic cast reinterpret cast 表示式是否合法取決於運算元的型別,而且合法的表示式其含義也由運算元型別決定。在c 中,某些型別之間存在相關的依賴關係。若兩種型別相關,則可在需要某種型別的運算元位置上,使用該型別的相關型別物件或...

C 與型別轉換相關的4個關鍵字

首先,c 與型別轉換相關的四個關鍵字有 const cast,static cast,dynamic cast,reinterpret cast.什麼是型別轉換?表示式是否合法取決於運算元的型別,而且合法的表示式其含義也由運算元型別決定。但是在c 中,某些型別之間存在相關的依賴關係。若兩種型別相關,...

C 中4個與型別轉換相關的關鍵字( cast)

在c c 語言中用 type value 在c 還可以採用type value 來進行顯式型別轉換 explicit type conversion 常常又被稱為強制轉換 cast投射 鑄模 這種轉換的正確性完全掌握在程式設計師手中,傳統上強制轉換往往被過度使用,成為c 程式犯錯的乙個主要根源。為了...