條款2 最好使用c 轉型操作符

2021-09-01 22:02:55 字數 1176 閱讀 9412

c轉型方式有兩個缺點,一是它幾乎允許將任何型別轉化為任何其他型別,二是它的語法結構難以辨識。

為了解決c舊式轉型的缺點,c++匯入4個新的轉型操作符。

1.static_cast(expression)

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

double b = 10;

int a = static_cast(b);

2:const_cast(expression)

const_cast用來改變表示式中的常量性或變易性,也就是const屬性。

const double *bb = &b;

double* dd = const_cast(bb);

3:dynamic_cast(expression)

dynamic_cast用來執行擊沉體系中"安全的向下轉型或者跨系轉型動作"。安全的意思是說,我們可以得知這個轉型操作是否成功。若失敗,如果 轉型物件是指標 會返回乙個null;如果 轉型物件是引用 會返回乙個exception。無法應用在缺乏虛函式的型別上,也不能改變常量性。

class base

};class derived :base

};base* bbb = new base();

derived* aaa = dynamic_cast(bbb);

derived& ccc = dynamic_cast(*bbb);

4:reinterpret_cast(expression)

type必須是乙個指標、引用、算術型別、函式指標或者成員指標。它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標。

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

int dosomething()

typedef float (*funcptr)();

funcptr funcptrarray[10];

int (*f)() = dosomething;

cout << (*f)() << endl;

funcptrarray[0] = reinterpret_cast(&dosomething);

cout << (*funcptrarray[0])() << endl;

2 最好使用C 轉型操作符

舊式的c轉型方式,幾乎允許你將任何型別轉換為任何其它型別,有其自身的缺陷,表現在以下兩方面 不能更精確地指明其轉型的意圖。如將乙個pointer to base class object 轉型為乙個pointer to derived class object 改變乙個物件的型別 和將乙個point...

M2 最好使用C 轉型操作符

1 c語言中的轉型操作符有兩個問題 a 是個通用的轉換操作符,也就是說,可以從乙個型別轉換到其他型別。通用必定是低效率和冗餘的,因為要考慮很多情況。b 在 中,難以辨認出哪些是型別轉換。2 c 提供了新式的轉換操作符,有static cast,dynamic cast,const cast,rein...

C 轉型操作符

解釋四個新型操作符的用途 static cast 基本與擁有與c舊式轉型相同的威力與意義,以及相同的限制。如 計算兩個int型數相除,結果為double型 int firstnum,secondnum double res double firstnum secondnum 舊式c語法 double...