C 型別轉換符

2021-09-12 20:01:05 字數 1245 閱讀 5444

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 繼承...