4個c++型別轉換運算子
使用static_cast
用於指標,提供基本的編譯階段檢查,確保指標被轉換為相關型別。
c風格型別轉換可將指向乙個物件的指標轉換為完全不相關的型別,而編譯器不會報錯。
向上轉換(derived*->base*):無需使用任何顯式型別轉換運算子
向下轉換(base*->derived*):必須使用顯式型別轉換運算子
static_cast不會指向任何執行階段檢查
base* objbase = new base();
derived* objder = static_cast(objbase);//no errors!
objder->derivedfun();//能夠通過編譯,但在執行階段可能導致意外
使用dynamic_cast
動態型別轉換在執行階段執行型別轉換。可判斷型別轉換是否成功。是執行階段型別識別(rtti)
典型語法:
base* objbase = new derived();
derived* objder = dynamic_cast(objbase);
if(objder)
objder->callderivedfun();
使用reinterpret_cast
強制轉換,能夠將一種物件型別轉換(解釋)為另一種。與c風格型別轉換最為接近。通常用於低階程式(如驅動)將資料轉換為api能夠接受的簡單型別;
unsigned char* bytesfoapi = reinterpret_cast(obj);
容易引起不安全行為,應盡量避免使用。
使用const_cast
移除物件的const屬性。
使用場景:
//某個第三方庫的實現
class someclass;
//我們的呼叫介面
void show(const someclass& obj)
除非萬不得已,不要使用const_cast來呼叫non-const函式。
const_cast也可用於指標:
void show(const someclass* obj)
應盡量避免使用型別轉換 C 型別轉換符
c 是一門強型別語言,一般不支援強制型別轉換,但本語言內部提供了型別轉換符用於不同型別間的轉換 1 const cast 去掉型別的const或volatile屬性 常用於 1 常量指標被轉換成非常量指標,仍指向原來的物件 2 常量引用被轉換成非常量引用,仍指向原來的物件 3 常量物件被轉換成非常量...
c 型別轉換運算子
c 中有4個型別轉換運算子,使裝換過程更規範 dynamic cast type name expression 如果轉型失敗則返回0,即空指標。該運算子的用途是,使得能夠在類層次結構中進行向上轉換 由於 is a關係,這樣的型別轉換時安全的 而不允許其他轉換。二 const cast const ...
C 型別轉換運算子
隱式轉換,是針對不同型別之間的賦值和運算,函式呼叫傳遞引數 這些的轉換都是由編譯器自動完成 char ch int i ch 顯式轉換 由程式設計師在變數前面新增型轉換 char pc char pb void ps void pa 通過上述的兩種方式,c語言大部分的型別轉換都可以順利進行,c 繼承...