「reinterpret_cast」タグのついた投稿

C++にはC言語で使えたキャスティングとは別に、新しいキャスティングのオペレーターが4つあります。

static_cast<> – static_castは制限が付いたC言語のキャスティングの動作をします。static_castでオブジェクトがキャストされる場合、そのオブジェクトはアップキャストかダウンキャストしか出来ません(継承元となっている親クラスにキャストするか、新たに継承された子クラスにキャストするか)。C++でキャスティングする場合、基本的にはstatic_castを使う方が他のキャスティングより安全で、動作が読みやすいのでオススメです。

const_cast<> – const_castはconst変数からconstを外すか、変更可能な変数にconstを付け加えられます。基本的にconst_cast で必要な機能は自動的にされるので(関数のパラメーターをconst化など)、const_castは使う必要は無い、または使う必要が有る時はデザインを見直したほうが良い時があります。

reinterpret_cast<> – reinterpret_castはC言語のキャストと同じく、どのタイプの変数も関係なくどのタイプにもキャスティングできます。この機能はconst_castと同じく、必要がないのならstatic_castで済ませた方が安全です。

dynamic_cast<> – コレまでのキャスティングは全てコンパイル時に確認され、キャスティングができない時にはエラーが返されますが、dynamic_castはプログラム実行時に動的にキャスティングされます。dynamic_castはC++の既存のデータ型には使えず、プログラマーに作られたクラスをポインターか、参照型で使われている時にだけ使えます。キャストされるため正当な変換かどうかの確認が実行中に行われるため、もしキャスト出来ない変換だった場合はNULLポインターを返します。dynamic_castを使うためにはRTTIが必要(そのうち書き足します)。