C++タイプ変換static_cast、dynamic_cast、const_cast、reinterpret_cast

1989 ワード

         :C++          ,   dynamic_cast,const_cast,static_cast,reinterpret_cast。  dynamic_cast            ,        dynamic_cast,         。  
6.1、dynamic_cast       :                                  ,  dynamic_cast              ,     dynamic_cast<  >(   ),                    ,          B    B       D, B *pb; D *pd, md;  pb=&md; pd=dynamic<D*>(pb);               D     pb      D   ,            D   pd,              ,    pd          pd=&md;       ?            ,              B      D                           D   ,        D         ,     D          g(),            dynamic_cast<D*>(pb)->g();  dynamic_cast                 ,                 。                ,     pb       B 。                        。            dynamic_cast   ,  dynamic_cast           ,         。
  6.2、dynamic_cast     :dynamic_cast             。dynamic_cast              。dynamic_cast                        ,           ,      ,          0 ,         ,     bad_cast  ,     dynamic_cast       if              ,  pd=dynamic_cast<D*>(pb); if(pd){…}else{…},      if(dynamic_cast<D*>(pb)){…}else{…}。
  6.3、const_cast   :     const_cast<  >(   ),                  。        const volatile,const_cast          const  ,               ,             ,       const_cast    。const_cast              ,     const volatile, const_cast   int   double,    const int   int。const_cast         。const_cast       :int a=3; const int *b=&a; int* c;  c=const_cast<int*>(b); *c=4; cout<<a<<*c;      4,     const_cast        *c        ,     const_cast   ,    b           a  。
  6.4、static_cast   :              ,            , static_cast   int   double,                 ,   A            B  。static_cast      c          。  
6.5、reinterpret_cast   :                      ,                ,             ,              ,          。