Looking for c++ Answers? Try Ask4KnowledgeBase
Looking for c++ Keywords? Try Ask4Keywords

C++明示的な型変換


前書き

式は、どの型のキャストが意図されているかに応じて、 dynamic_cast<T>static_cast<T>static_cast<T> reinterpret_cast<T> 、またはconst_cast<T>を使用して明示的に変換したり、型T キャストできます。

C ++は、関数形式のキャスト表記法T(expr)とCスタイルキャスト表記法(T)exprもサポートしています。

構文

  • 単純型指定子 ( )
  • 単純型指定子 ( 式リスト )
  • 単純型指定子 braced-init-list
  • typename-specifier ( )
  • 型名指定子 ( 式リスト )
  • typename-specifier braced-init-list
  • dynamic_cast < type-id > ( )
  • static_cast < type-id > ( )
  • reinterpret_cast < type-id > ( )
  • const_cast < type-id > ( )
  • ( 型-id ) キャスト式

備考

6つのキャスト記法には共通するものが1つあります。

  • dynamic_cast<Derived&>(base)ように左辺値参照型にキャストすると、左辺値が得られます。したがって、同じオブジェクトで何かをしたいが、それを別の型として扱う場合は、左辺値参照型にキャストします。
  • static_cast<string&&>(s)ように、 static_cast<string&&>(s)参照型にキャストすると、 static_cast<string&&>(s)れます。
  • (int)xように、非参照型にキャストすると、キャストされる値のコピーとして考えられるが、元のものとは異なる型のプリ評価値が生成されます。

reinterpret_castキーワードは、2種類の「安全でない」コンバージョンを実行します。

static_castキーワードは、さまざまな異なるコンバージョンを実行できます。

  • ベースからコンバージョンへの変換

  • 暗黙の変換と明示的なコンストラクタまたは変換関数を呼び出す変換の両方を含む、直接初期化によって実行できる変換。詳細はこちらこちらをご覧ください。

  • voidの場合は、式の値を破棄します。

    // on some compilers, suppresses warning about x being unused
    static_cast<void>(x);
    
  • 算術と列挙型の間、および異なる列挙型間。 列挙型変換を参照

  • 派生クラスのメンバへのポインタから、基本クラスのメンバへのポインタへ。指定された型は一致する必要があります。 メンバーへのポインタのための派生から基底への変換を参照

  • void*からT* void*

C ++ 11

明示的な型変換 関連する例