C++メモ:C++のキャスティング

Posted: 2011年7月10日 カテゴリー: プログラミングメモ, C++メモ
タグ:, , , , , , , ,

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が必要(そのうち書き足します)。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中