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

2021-08-21 11:44:56 字數 1134 閱讀 2423

static_cast

const_cast

dynamic_cast

reinterpret_cast

表示式是否合法取決於運算元的型別,而且合法的表示式其含義也由運算元型別決定。在c++中,某些型別之間存在相關的依賴關係。若兩種型別相關,則可在需要某種型別的運算元位置上,使用該型別的相關型別物件或值。如果兩個型別之間可以相互轉換,則稱這兩個型別相關。

「轉換」是一種編譯器指令,大部分情況下他不改變乙個指標所含的真正位址,他只影響「被指出之記憶體大小和其內容」的解釋方式。

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

在同一類層次結構中的乙個指標型別到另乙個指標型別,整形到列舉,浮點型到整形等。

例:

int m=0;

double n=static_castm;

int *p=static_cast(malloc(100));

2.const_cast--移除變數的const或volatile限定符

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

3.dynamic_cast--處理基類到派生類的轉換(基類必須有虛函式,為多型時可以轉換)

它是執行時進行型別檢測的型別轉換,如果繫結到引用或指標的物件不是目標型別的物件,則dynamic——cast建立失敗。

將基類的指標或引用安全地轉換為派生類的指標或引用。當虛函式不能使用的時候,再使用dynamic_cast關鍵字,從基類指標獲得派生類行為。

class base

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

};class derived:public base

};int main()

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

它可以轉換任何內建的資料型別為其他任何的資料型別,也可以轉換任何指標型別為其他的型別。他甚至可以轉換內建的資料型別為指標,無需考慮型別安全或者常量的情形,不到萬不得已不使用它。

int a=10;

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

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

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

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

static cast reinterpret cast dynamic cast const cast 1.static cast 運算子完成相關型別之間的轉換 使用場景 如在同一類層次結構中的乙個指標型別到另乙個指標型別,整型到列舉型別,或者浮點型到整型等。例 1,int m 10 double...

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

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