キャスト演算子について今回は、C++のキャストについてまとめたいと思います。おさらいC言語のキャストは以下のように記述しますが、これにはいくつかの欠点が存在します。Cスタイルのキャストひとつは、どんな型へも容易にキャストできてしまうことです。必要な情報を簡単に削ぎ落としてしまうため、constやvolatile等の修飾子の情報が消滅する危険が伴います。ひとつは、Cスタイルのキャストはすべて同じ書き方をするという点です。これには、キャストの意図を明示しないため、コードの目的を分かりづらくする欠点があります。C++では、Cスタイルのキャストも使用できますが、以下のキャスト演算子が追加されています。static_castconst_castreinterpret_castdynamic_caststatic_cast演算子static_castは、double→int、enum→intなどの一般的なキャストで使用します。名前から想像できるように、static_castはコンパイル時に評価され、実行時には型変換の情報が確定します。コンパイル時にエラー・チェックも合わせて実施されるため、不正なキャストを早期に発見できるメリットもあります。コンパイラが暗黙の型変換を知らない場合、コンパイル・エラーが発生します。具体的には、以下の場合にstatic_castが成功し、それ以外ではコンパイル・エラーとなります。ここで、fooがintからdoubleに変換される。ここで、fooがintからdoubleに変換される。EXIT_SUCCESS;}const_cast演算子const_castは、const修飾子をはずすためのキャストで、通常は使用することはないでしょう。使用しているライブラリのインターフェイスとマッチしない場合など、特別な事情がある場合に、この演算子を使用します。const修飾子の情報を取り除く。const修飾子の情報を取り除く。EXIT_SUCCESS;}reinterpret_cast演算子static_castによるキャストでは、コンパイラによるビット・パターンの変化が発生する場合がありますが、reinterpret_castは文字通りにビットの並びを再解釈するために使用します。他のキャスト演算子に比べ、制限がほとんんどないので、コンパイラによるエラー・チェックが期待できません。したがって、通常はなるべく多用しないようにするべきですが、以下のような事情がある場合に使用します。EXIT_SUCCESS;}dynamic_cast演算子dynamic_castは、ダウン・キャスト(基底クラスから派生クラスへの型変換)を行う場合に使用します。一般的に、派生クラスには基底クラスにないメンバ変数やメンバ関数が含まれているため、ダウン・キャストはなるべく避けたほうが良いですが、必要に迫られた場合にdynamic_castを使用します。ちなみに、他の3つのキャストはCスタイルのキャストでも置き換えることができますが、dynamic_castに対応するキャストはC言語では実現できません。名前の通りコンパイル時に型が決定するわけでなく、実行時にキャスト可能か判定します。したがって、実行時のオーバーヘッドを考慮する必要があります。キャストできない場合はNULLポインタを返します。EXIT_SUCCESS;}まとめまとめると、以下のようになります。const_cast、またはdynamic_castの出番か判定する。static_castを使用する。上記のいずれにも当てはまらない場合は、reinterpret_castを使用する。以上、簡単でしたがC++のキャスト演算子についてまとめました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。