用於(指向派生類物件的)基類指標轉換成派生類指標。
如果轉換失敗,則返回0,即空指標。(通過判斷轉換是否成功,來決定是否用派生類裡的函式(基類中可能沒有那個函式))
class
a {};
class
b : public
a {};
class
c : public
b {};
a* a = new a;
a* b = new b;
a* c = new c;
//指向b(派生類)物件的a(基類)指標轉換成b指標
b* b2 = dymanic_cast(b);
//指向c(派生類)物件的a(基類)指標轉換成c指標,再隱式轉換為c的基類b指標
b* c2 = dymanic_cast(c);
//如果轉換失敗,則為0,可用在if判斷中。下面語句c3指向空指標
c* c3 = dymanic_cast(b);
只能用來去除const或volatile標籤。
用處:函式形參為const指標或引用時,在函式中要改變指向的值時。
int a = 1;
const
int *p = &a;
int *q = const_cast
(p);
*q = 2;//用*q來改變a的值
可以顯示地進行向上轉換(可隱式轉換)和向下轉換。
即,兩個型別中,其中任意乙個型別可以隱式地轉換成另乙個型別,用這個就合法。
int a=10;
//因為int可以隱式(向上)轉換成double,所以下面兩種形式都合法。
double b = static_cast
(a);
int c = static_cast
(b);
進行危險型別轉換(如:指標轉整形)。
可以小記憶體轉大記憶體,不能大記憶體轉小記憶體。
不允許刪除const。
不能將函式指標與資料指標互相轉換。
struct dat;
long val = 0xa224b118;
dat* p = reinterpret_cast
(&val);
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 繼承...
C 型別轉換運算子
目錄 dynamic cast static cast const cast reinterpret cast c語言的型別轉換比較自由,但也帶來了一些問題,這些問題大多由程式設計師自行控制和解決。對於龐大的c 語言機制而言,這種簡單粗暴的型別轉換方式顯然是個巨大的負擔,因此c 引入4種型別轉換運算...