空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

C++のキャスト

「うちの会社にはC++のキャストを理解している人がいない!プンスカ!」とつねづね思っていたが,かくいう私も,いままで void ポインタから普通のポインタへのキャストに reinterpret_cast を使っていたというのは秘密だ。

で,本当は意図からすると static_cast を使うのが正しい(危険度は同じ)。AからBへの暗黙の型変換が存在して,とあるオブジェクトがB型の変数に格納されているんだけど,実はそれがA型であることが明らかな場合,BからAへの static_cast を使うことができる。

const/非constの違いを脇におくと,C++では任意のポインタからvoidポインタへの暗黙の型変換が可能なので,上記のシナリオが成り立つというわけ。

ちなみにCだとvoidポインタから任意のポインタに暗黙の型変換ができてしまうので,キャストすら不要である。