static_cast<NUMBERS>(a)
static_castの仕様には次のものが含まれているため:
整数型または列挙型の値は、明示的に列挙型に変換できます。元の値が列挙値(7.2)の範囲内にある場合、値は変更されません。それ以外の場合、結果の値は指定されません(そして、その範囲内にない可能性があります)。浮動小数点型の値は、列挙型に変換することもできます。結果の値は、元の値を列挙型の基になる型(4.9)に変換し、続いて列挙型に変換するのと同じです。
static_castは、通常、あるタイプの値を取得し、その値を別のタイプとして表すためのものです。すべての詳細をカバーする仕様は約2ページありますが、その基本的な考え方を理解していれば、static_castをいつ使用するかがわかるでしょう。たとえば、ある積分タイプから別の積分タイプに積分値を変換する場合、または浮動小数点値を積分値に変換する場合です。
dynamic_castは、動的型を操作するためのものであり、ほとんどの場合、ポリモーフィックなユーザー定義型にのみ役立ちます。たとえば、参照されるオブジェクトが実際にDerivedである場合は、Base*をDerived*に変換します。
reinterpret_castは通常、あるタイプの値の表現を取得し、別のタイプの同じ表現を持つ値を取得するためのものです。つまり、型のパンニング(C ++では多くの型のパンニングは実際には合法ではありませんが)。たとえば、整数のストレージにcharの配列としてアクセスする場合。
const_castは、タイプの任意のレベルでcv修飾子(constおよびvolatile)を追加および削除するためのものです。例えば、int const * volatile **i; const_cast<int volatile ** const *>(i);