**
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------處理基型別到派生型別的轉換
**(這個說法不是很準確,為了好理解先這麼寫)
使用場景:基類必須有虛函式,即為多型時,可以轉換
例:
class4,const_cast用來移除變數的const或volatile限定符。base
//基類中存在虛函式,故在派生類中存在虛函式指標指向虛函式表。
};class derived:public
base
};int
main()
一句話:強制去掉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 程式犯錯的乙個主要根源。為了...