c++中有四個新的轉型操作符:static_cast,dynamic_cast,const_cast,reinterpret_cast.
static_cast的功能和c中的強制轉換差不多
基本資料型別中轉化,在有相關聯的類中相互轉換
int a;
double b=static_cast a;
dynamic_cast用來執行繼承體系中的『安全的向下轉型』,轉換成功返回指標或者引用,失敗返回null**型物件是指標)或者exception**型物件是引用)
注意:基類中一定要含虛函式
向下型別:將基類指標或者引用轉換成子類指標或者引用(因為基類指標或者引用可以指向,當這種情況發生時,轉換成功,否者子類指標或者引用指向了基類物件(這是錯誤的,一般來說子類的表示範圍更大,指標指向了超出物件的記憶體位置))
說明:static_cast 也可以如此,但是不會有型別檢查
向上型別:將子類指標或引用轉換成基類指標或引用
const_cast:將const型別指標或引用轉換成非const型別的指標或引用或者反過來
const
int a=10;
int *p=&a;//錯誤
int *p=const_cast
(&a)//正確
reinterpret_cast:用來處理無關型別之間的轉換,最常用的用途是指標型別中的轉換(不同型別中的指標可以相互轉換)。它的機理是對二進位制資料進行重新的解釋,不改變二進位制原來的格式。static_cast會改變二進位制的值。
借用別人的話
static_cast 和 reinterpret_cast 操作符修改了運算元型別。它們不是互逆的; static_cast 在編譯時使用型別資訊執行轉換,在轉換執行必要的檢測(諸如指標越界計算, 型別檢查). 其運算元相對是安全的。另一方面;reinterpret_cast 僅僅是重新解釋了給出的物件的位元模型而沒有進行二進位制轉換,例子如下:
int n=9;
double d=static_cast < double > (n);
上面的例子中, 我們將乙個變數從 int 轉換到 double。這些型別的二進位制表示式是不同的。 要將整數 9 轉換到 雙精度整數 9,static_cast 需要正確地為雙精度整數 d 補足位元位。其結果為 9.0。而reinterpret_cast 的行為卻不同:
int n=9;
double d=reinterpret_cast
(n);
這次, 結果有所不同. 在進行計算以後, d 包含無用值. 這是因為 reinterpret_cast 僅僅是複製 n 的位元位到 d, 沒有進行必要的分析. C 轉型操作符
解釋四個新型操作符的用途 static cast 基本與擁有與c舊式轉型相同的威力與意義,以及相同的限制。如 計算兩個int型數相除,結果為double型 int firstnum,secondnum double res double firstnum secondnum 舊式c語法 double...
C 轉型操作符
說c 轉型操作符之前,我覺得有必要講講c的操作符 舊式的操作符 1.type expression type expression 舊轉型幾乎可以允許你將任何型別轉換為任何型別,這是十分拙劣的,而且其辨識度低,意圖不明確。所以我們引入了c 的轉換操作符。const cast用於改變表示式中的常量性或...
轉型操作符
轉型操作符可以將其他型別的轉換成所需的類的型別。如果要進行相反的轉型動作,即可將類的型別轉換為其他型別,可以對轉型操作符進行過載,轉換操作符過載函式的語法如下 operator othertype 注意宣告中不包含返回 型別,即使是void也不行,但函式體中必須包含return語句,用來返回轉型結果...