category: C / C++
DATE : 2006/10/16 (Mon)
DATE : 2006/10/16 (Mon)
C++ には、使用目的に応じた4種類のキャストがあります。
加えて C 言語形式のキャストも使用できますが、キャストの使用目的が不明瞭になるため推奨されていません。
C++ のキャストは以下の種類に分かれています。
- static_cast
- reinterpret_cast
- const_cast
- dynamic_cast
static_cast を例にとると、次のように使用します。
double d = 2.5; int i = static_cast<int>(d);
「<>」の間にキャスト先の型を入れ、「()」内にキャスト対象の値などを入れます。
以下に使い方を簡単にまとめます。
- static_cast
- 暗黙の型変換が存在する場合に使用するキャストです。例えば、int と double 間や継承関係を持つクラス間のポインタ、参照に使用できます。また、void 型ポインタから具体的な型のポインタへ、int 値から列挙型への変換にも使用できます。
- reinterpret_cast
- 型だけを単純に変更し、内部のビット列は変更しない場合に使用するキャストです。具体的には、ポインタ型同士の変換に使用します。
- const_cast
- ポインタや参照の const 修飾子、volatile 修飾子を外すためのキャストです。
- dynamic_cast
- 仮想関数のある継承関係を持つクラス間のポインタ、参照の型変換を動的に行うためのキャストです。 static_cast とは違い、型変換が行えない場合はキャストの結果が0(ヌル)となります(参照の型変換の場合は、std::bad_cast 例外が発生します)。なお、基底クラスに仮想関数がない場合は、dynamic_cast は使えません。
参考文献
- C++ の新しいキャスト
- C++ の4つのキャストを使いこなす
- C++編(言語解説) 第24章 C++ 独自のキャスト
- キャスト後のポインタの値:実装情報
- C++ プログラミングガイド 第7章 キャスト演算
PR
●この記事にコメントする
忍者ブログ [PR]