c 轉型操作符

2021-08-03 07:16:47 字數 1455 閱讀 7043

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語句,用來返回轉型結果...