02項 C++スタイルのキャストを愛用する

C++スタイルのキャストを愛用する

Cのキャストと比べたC++のキャストの利点は、目的別に複数のキャストが用意されていることと、キャストが見分けやすいことです。

static_cast

static_castは以下の場合に呼び出されます。
・数値型同士での変換
・列挙型と整数型との変換
・型変換キャスト演算子の呼び出し
const/volatileの付加
・オブジェクトのポインタとvoidポインタとの変換

const_cast

const,volatileの削除または付加を行います。
const_cast内の型は、ポインター、参照、またはオブジェクト型のメンバーへのポインターである必要があります。

dynamic_cast

継承関係にある階層を下または横にキャストします。
dynamic_cast 内の型は、完全なクラス型へのポインターまたは参照であるか、void * である必要があります
キャスト失敗時はnullポインター(ポインターキャストの時)か例外(参照キャストの時)で示されます。

reinterpret_cast

・異なる型へのポインタ同士の変換
・ポインタと整数の変換
・ポインタと参照の変換
・参照先の変更
ができます。



static_cast以外は、できる限り使うべきではありません。



More Effective C++のほかに、下の書籍も参考にしました。

C++ ポケットリファレンス

C++ ポケットリファレンス