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...