C++ 類型轉換

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 .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章