1. C風格類型轉換
TYPE xxx = (TYPE)expression ;
比如 :
int * pnTest = new int[count];
char * pchTest = (char*)pnTest ;
2. C++風格類型轉換
1.) const_cast(expression)
一般用於強制消除對象的常量性。
比如:
const char * pchTestConst = XXX ;
char * pchTest = const_cast<char *>pchTestConst ;
2.) dynamic_cast(expression)
用於對象的指針和引用,在多態下用於父子類之間的向下安全轉換,同時帶來重大的運行期代價。
比如:
class A { } ;
class B : public A { } ;
A * pA1 = new B ;
A * pA2 = new A ;
// 指針轉換
B * pB1 = dynamic_cast<B *>(pA1) ; // 成功,因爲pA1本來就指向的是B對象.
B * pB2 = dynamic_cast<B *>(pA2) ; // 失敗,pB2 = NULL .
// 引用轉換
B b1 = dynamic_cast<B &*>(pA1) ; // 成功.
B b2 = dynamic_cast<B &*>(pA2) ; // 失敗,拋出一個bad_cast的異常.
3.) reinterpret_cast(expression)
轉換過程中不做任何類型檢查和轉換,只是轉換對二進制的解釋!
比如:
class A { } ;
class B { } ;
A * pA = new A ;
B * pB = reinterpret_cast<B *>(pA) ; // 此時,pA 和pB將擁有同樣的值(地址).
4.) static_cast(expression)
類似於C風格的類型轉換,用於非多態轉換。
比如:
double dbTest = 5.0123 ;
int nTest = static_cast<int>dbTest ; // 此時,nTest == 5 .