static_cast是乙個強制型別轉換操作符。強制型別轉換,也稱為顯式轉換,c++中強制型別轉換操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四個。本節介紹static_cast操作符。
double當編譯器隱式執行型別轉換時,大多數的編譯器都會給出乙個警告:a = 1.999
;int b = static_cast(a); //
相當於b = a ;
e:\vs 2010 projects\static_cast\static_cast\static_cast.cpp(11): warning c4244: 「初始化」: 從「double」轉換到「int」,可能丟失資料使用static_cast可以明確告訴編譯器,這種損失精度的轉換是在知情的情況下進行的,也可以讓閱讀程式的其他程式設計師明確你轉換的目的而不是由於疏忽。
把精度大的型別轉換為精度小的型別,static_cast使用位截斷進行處理。
double a = 1.999static_cast也可以用在於基類與派生類指標或引用型別之間的轉換。然而它不做執行時的檢查,不如dynamic_cast安全。static_cast僅僅是依靠型別轉換語句中提供的資訊來進行轉換,而dynamic_cast則會遍歷整個類繼承體系進行型別檢查,因此dynamic_cast在執行效率上比static_cast要差一些。現在我們有父類與其派生類如下:;
void * vptr = &a;
double * dptr = static_cast(vptr);
cout
<
輸出1.999
class此時我們進行派生類與基類型別指標的轉換:注意從下向上的轉換是安全的,從上向下的轉換不一定安全。animal
;
virtual
void outputname();
private
:
string
_type ;
};class dog:public
animal
;
void outputname();
void outputtype();
private
:
string
_name ;
string
_type ;
};
intmain()
強制型別轉換操作符
操作符 中文名稱 含義 dynamic cast 動態型別轉換符 支援多型而存在,主要用於類之間的轉換 static cast 靜態型別轉換符 僅僅完成編譯時期的轉換檢查 reinterpret cast 再解釋型別轉換符 完成不同型別指標之間的相互轉換 const cast 常型別轉換符 用來修改...
C 強制型別轉換操作符 dynamic cast
原文 主題c dynamic cast是四個強制型別轉換操作符中最特殊的乙個,它支援執行時識別指標或引用。編譯器的rtti設定 dynamic cast提供rtti run time type information 也就是執行時型別識別。它對編譯器有要求,需要編譯器啟動 執行時型別資訊 這一選項。...
C 強制型別轉換操作符 dynamic cast
dynamic cast是四個強制型別轉換操作符中最特殊的乙個,它支援執行時識別指標或引用。編譯器的rtti設定 dynamic cast提供rtti run time type information 也就是執行時型別識別。它對編譯器有要求,需要編譯器啟動 執行時型別資訊 這一選項。當編譯器不開啟...