【特點】:靜態轉換,在編譯處理期間。
【應用場合】:主要用於c++中內建的基本資料型別之間的轉換,但是沒有執行時型別的檢測來保證轉換的安全性。
用於基類和子類之間的指標或引用之間的轉換,這種轉換把子類的指標或引用轉換為基類表示是安全的;進行下行轉換,把積累的指標或引用轉換為子類表示時,由於沒有進行動態型別檢測,所以是不安全的。
把void型別的指標轉換成目標型別的指標(不安全)。
不能用於兩個不相關的型別轉換。
不能把const物件轉換成非const物件。
例1:
int m=10;
double n=static_cast
< int > m;
例2: int * q=static_cast
< int* >(malloc(100));
【特點】: 重解釋型別轉換
【應用場合】:它有著和c風格強制型別轉換同樣的功能;它可以轉化任何的內建資料型別為其他的型別,同時它也可以把任何型別的指標轉化為其他的型別;它的機理是對二進位制進行重新的解釋,不會改變原來的格式。
例: int a=10;
double* b=reinterpret_cast
(a);
//b的轉換結果為0x0000000a
【應用場景】:基類必須有虛函式,即為多型時,可以轉換
class base
//基類中存在虛函式,故在派生類中存在虛函式指標指向虛函式表。
};class derived:public base
};int main()
【特點】:去常轉換,編譯時執行。
【應用場合】:const_cast操作不能在不同的種類間轉換。相反,它僅僅把它作用的表示式轉換成常量。它可以使乙個本來不是const型別的資料轉換成const型別的,或者把const屬性去掉。
注: volatile的作用是: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
簡單地說就是防止編譯器對**進行優化.比如如下**:
a=1;
a=2;
a=3;
a=4;
對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器卻會對上述四條語句進行優化,認為只有a=4(即忽略前三條語句,只產生一條機器**)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器**(產生四條**)
在上面四個型別轉化關鍵字中,除了static_cast,其他的三個都有可能涉及到指標的型別轉換。
從本質上來說,指標的型別不同,並沒有產生很大的差異,他們都是需要足夠的記憶體來存放乙個機器位址。「指向不同型別之各指標」間的差異,既不在其指標表示法不同,也不在其內容(代表乙個位址)不同,而是在其所定址出來的object不同。也就是說,「指標型別」會教導編譯器如何解釋某個特定位址中的記憶體內容及其大小。
所以,轉換(cast)其實是一種編譯器指令。大部分情況下它並不改變乙個指標所含的真正位址,它只影響「被指出之記憶體大小和其內容」的解釋方式。
C 之四個強制型別轉換
如果兩種型別相關,則可在需要某種型別的運算元位置上,使用該型別的相關型別物件或值。如果兩個型別之間可以相互轉換,稱這兩個型別相關。強制型別轉換,又叫顯式轉換,包括四個操作符 static cast dynamic cast const cast reinterpret cast。一般形式 cast ...
C 的四個指標轉換
知識 一.使用方法 dynamic cast static cast const cast reinterpret cast 二.各個指標的用處 1.static cast 最常用的型別轉換符,在正常狀況下的型別轉換,如把int轉換為float,如 int i float f f float i 或...
C 四個顯式資料型別轉換函式
1 reinterpret cast 在編譯期間實現轉換 reinterpret cast型別轉換函式將乙個型別的指標轉換成另乙個型別的指標。這種轉換不用於修改指標變數值資料存放的格式 不改變指標變數值 只需在編譯期間重新解釋指標的型別就可以做到。reinterpret cast可以將指標值轉換為乙...