static cast(型変換演算子)
カテゴリ
構文
static_cast< T > (arg)
説明
この文、static_cast<T> (arg) では、T は、ポインタ、 参照、算術型、または列挙型でなければなりません。 T と arg は、どちらもコンパイル時に完全に既知でなければなりません。
言語で既に提供されている変換メソッドによって、完全型を別の型に変換できる場合は、static_cast を使用した変換を行うと、それと全く同じことが実行されます。
整数型は、列挙型に変換できます。 arg を 列挙の要素ではない値に変換する要求は、未定義になります。
NULL ポインタは、変換先の型、T の NULL ポインタ値に変換されます。
1 つのオブジェクト型へのポインタを、別のオブジェクト型へのポインタに変換することができます。 類似の型でもアラインメントが類似していない場合は、それらの型へのポインタを使用するだけで、アクセスの問題が生じることがあります。
クラス X がクラス Y の基底クラスの場合は、X へのポインタを Y へのポインタに明示的に変換できます。 静的変換は、以下の条件下でのみ行うことができます。
- Y から X へのあいまいさのない変換が存在する場合
- X が仮想基底クラスでない場合
オブジェクトへのポインタを明示的に X* に変換できる場合は、そのオブジェクトを明示的に参照型 X& に変換できます。 その変換結果は左辺値です。 参照へのキャストの結果として、コンストラクタや変換関数が呼び出されることはありません。
オブジェクトや値をクラス オブジェクトに変換できるのは、適切なコンストラクタや変換演算子が宣言されている場合だけです。
メンバへのポインタを、別のメンバへのポインタ型に明示的に変換できるのは、両方の型が同じクラスのメンバへのポインタの場合か、一方のクラスが他方のクラスからあいまい性なく派生している関係にある 2 つのクラスのメンバへのポインタの場合だけです。
T が参照の場合、static_cast<T> (arg) の結果は左辺値になります。 ポインタや参照のキャスト結果は、元の式を参照します。