c++のタイプ変換子


1、Cでの変換:暗黙的変換と強制変換の表示
1)暗黙的変換:暗黙的なタイプ変換とは言語そのものであり、コンパイラを使用すると、自動的に必要なタイプを与えてくれる
                int num=5;
               float ab=num;//暗黙的変換
2)表示変換
               float num =0.67;
               int a=(int ) num;//変換を表示
Cでは、強制タイプ変換を通常(type)で行います.この変換は暴力的です.変換されたデータがtypeタイプに変換できるかどうかにかかわらず、コンパイラは強制的に変換します.しかし、Cの変換なので、C++の場合によっては適用されません.子と親のタイプ変換、
2、C++のタイプ変換子:static_cast、 dynamic_cast  const_cast  reinterpret_cast
彼らの文法規則はstatic_です.cast (expression)  dynamic_cast (expression)  const_cast (expression)   reinterpret_cast (expression) 
      1) static_cast
このオペレータはCの強制変換に似ていて、多くの場合に使用されます.あるいは、いつ残りのdynamic_を使うべきか分かりません.cast  const_cast  reinterpret_キャストなどの変換子はstatic_キャストで変換します.
適用する場合:intでfloatを変換し、サブタイプが親タイプに変換され(上型変換、これは安全で、すべてこの変換が可能で、親タイプのポインタで子タイプのポインタを指す)、親タイプが子タイプに変換され(下り変換、安全ではなく、プログラマー自身が安全性を保証する必要がある)、他のタイプのポインタがvoid*、void*が他のタイプのポインタに変換されます.
該当しない場合:static_castはexpressのconst属性volitale属性を削除できません.(これらの属性の削除は、よりプロフェッショナルなタイプ変換子const_castで行うことができるため)
     2)dynamic_cast
名前の通り、このタイプの変換オペレータはマルチステートに使用されます.
適用する場合:子クラスと親タイプの上下行タイプが上に変換されます.タイプ間の交差変換中(兄弟タイプ)
使用説明:I)サブクラスから親へのアップリンク変換でstatic_castは安全です(親タイプのポインタまたは参照で子タイプのポインタまたは参照を指します)
II)親タイプから子タイプへのダウンリンク変換では,虚関数の存在が要求され,dynamic_castはstatic_castよりも安全なタイプチェック機能を備えています.
III)交差変換時にNULLを返し、static_castはerrorをコンパイルする.
   eg:
class A
{
    public :
        virtual A~(){};
        int m_a;
}
 class B:public A
{
    public:
        int m_b;
}
class C: public A
{}
class D
{}
A *p_A=new A();
B *p_B=new B();
D *p_D=new D();
p_A=static_cast<A*>(p_B);//ok,          ,   static_cast   dynamic_cast      ;
p_B=static_cast<B*>(p_A);//ok,     ,    ,      ;
p_A=dynamic_cast<A*>(p_B);//ok,          ,   static_cast   dynamic_cast      ;
p_B=dynamic_cast<B*>(p_A);// A      ,ok!   NULL    //  A       ,error!     !
p_B=static_cast<B*>(p_D);//compile error
p_B=dynamic_cast(p_D);//コンパイル ok、 p_BはNULLに り てられる.
3)const_cast


    : const、volitale expression typeid 。

4)reinterpret_cast

    : , 。