c++的顯式型別轉換共分為四種:
static_cast
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast
int i=10;
double f=static_cast
(i);
int *p=&i;
double *q=static_cast
(p);
其他的型別轉換類似了,只要不是轉換底層const就行,底層const的轉換有下面的函式。
const_cast
用於改變運算物件的底層const
const
char*cp;
char *q=static_cast
(cp);//錯誤,不能轉換頂層const
static_cast
(cp);//正確,字串字面值轉換成string型別。
const_cast
(cp);//錯誤,const_cast只能改變常量屬性
reinterpret_cast
reinterpret_cast通常為運算物件的位模式提供較低層次上的重新解釋。舉個例子:
int *ip;
char *pc=reinterpret_cast
(ip);
我們必須牢記pc所指的真是物件是乙個int而非字元,如果把pc當成普通的字元指標使用就可能在執行時發生錯誤。例如:
string str(pc);
使用reinterpret_cast是非常危險的,因為pc的底層指向的是int型的位址,編譯器卻把它當做了char*型的,這樣初始化str可能會瞞過編譯器從而造成糟糕的結果,所以想使用reinterpret_cast必須對涉及的型別和編譯器實現轉換的過程都非常了解。
dynamic_cast
分為指標型別dynamic_cast和引用型別的dynamic_cast
dynamic_cast
if( derived *dp = dynamic_cast
(bp))
else
如果bp指向derived物件,則上述的型別轉換初始化dp並令其指向bp所指的derived物件。此時,if語句內部使用derived操作的**是安全的。否則,型別轉換的結果為0,dp為0意味著if語句的條件失敗,此時else執行base操作。
引用型別的dynamic_cast不會產生空引用,會丟擲異常。
C 顯式型別轉換
對於型別轉換,我在查資料的時候看到了一種很有意思的解釋,我們可以這樣理解型別轉換 某塊記憶體中的資料是不變的,而型別就是我們戴上的眼鏡,當我們戴上一種眼鏡後,我們就會用對應的型別來解釋記憶體中的資料,這樣不同的解釋就得到了不同的資訊。所謂強制型別轉換實際上就是換上另一副眼鏡後再來看同樣的那塊記憶體資...
c 顯式型別轉換
乙個命名的強制型別轉換具有以下形式 cast name expression 其中,type是轉換的目標型別,而expression是要轉換的值。如果type是引用型別,則結果是左值。cast name是static cast dynamic cast const cast reinterpret ...
C 顯式型別轉換
c 的隱式型別轉換不在此文章講述範圍。c 的顯式型別轉換有 4 種 static cast dynamic cast const cast reinterpret cast。語法 cast name expression type 是轉換的目標型別,expression 是要轉換的值。cast na...