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 .

你可能感兴趣的:(C++,类型转换,职场,休闲)