C 轉型操作符

2021-06-20 13:13:57 字數 1488 閱讀 5777

解釋四個新型操作符的用途:

static_cast

: 基本與擁有與c舊式轉型相同的威力與意義,以及相同的限制。如:

//計算兩個int型數相除,結果為double型

int firstnum, secondnum;

double res = (double)firstnum / secondnum; //舊式c語法

double res = static_cast(firstnum) / secondnum; //新式c++轉型符

const_cast

: 用來改變表示式中的常量性(constness)或易變性(volatileness)。如:

int num;

const int *cpnum = #

int *pnum = cpnum; //error:cannot convert from 'const int *' to 'int *'

int *pnum = (int *)cpnum; //舊式c

int *pnum = const_cast(cpnum); //新式c++ const_cast移除常量性

dynamic_cast

: 用來執行繼承體系中「安全的向下轉型或跨系轉型動作」。如:

//可以利用dynamic_cast將「指向base class object 的pointer或reference」轉型為「指向derived class object的pointer或reference」

//如果轉型失敗,會以乙個null指標或乙個exception 表現出來

class cbase ; //基類

class cderived: public cbase ; //繼承類

cderived dc;

cderived *dp = &dc;

cbase *bp = dynamic_cast(dp); //使用dynamic_cast將指向繼承類的指標轉化為指向基類的指標

cbase &br = dynamic_cast(dc); //使用dynamic_cast將指向繼承類的引用轉化為指向基類的引用

reinterpret_cast

: 最常用的用途是轉換"函式指標"型別。如:

typedef void (*funcptr)();    //funcptr是個無引數返回值為void型的函式指標型別

int ifunc() //ifunc為乙個無引數返回值為int型的函式

void func(funcptr f){} //func函式的引數是乙個型別為funcptr型別的函式指標

main()

c 轉型操作符

c 中有四個新的轉型操作符 static cast,dynamic cast,const cast,reinterpret cast.static cast的功能和c中的強制轉換差不多 基本資料型別中轉化,在有相關聯的類中相互轉換 int a double b static cast a dynam...

C 轉型操作符

說c 轉型操作符之前,我覺得有必要講講c的操作符 舊式的操作符 1.type expression type expression 舊轉型幾乎可以允許你將任何型別轉換為任何型別,這是十分拙劣的,而且其辨識度低,意圖不明確。所以我們引入了c 的轉換操作符。const cast用於改變表示式中的常量性或...

轉型操作符

轉型操作符可以將其他型別的轉換成所需的類的型別。如果要進行相反的轉型動作,即可將類的型別轉換為其他型別,可以對轉型操作符進行過載,轉換操作符過載函式的語法如下 operator othertype 注意宣告中不包含返回 型別,即使是void也不行,但函式體中必須包含return語句,用來返回轉型結果...