reinterpret_cast
読み:リインタープリット-キャスト
外語:reinterpret_cast

 C++の予約語の一つ。
目次

概要
 次の形で、型キャスト(型変換)に用いる。
 reinterpret_cast <型> (変数)
 整数とポインター、型の異なるポインターのような、解釈の仕方を変更する。

特徴

用途
 Cの場合は、明らかに互換性のない型キャストでも、静的な普通の型キャストが使われる。例えばMicrosoft Windowsでプログラムを組んでいると、頻繁にポインターとLPARAM(unsigned longなど)の相互変換などが必要になる。
 unsigned char *p;
 unsigned long ul;
 ul = (unsigned long)&p;
 C++では、通常の型キャストはstatic_cast演算子を用いるが、非互換の型キャストではコンパイルエラーになる。このような場合でも「強引に」型キャストしたい場合、reinterpret_cast演算子が使われる。書式はstatic_castと同じである。
 ul = reinterpret_cast<unsigned long>(&p)
 なお、reinterpret_castであっても、constの付いたものを外すことは危険すぎて出来ない。これをするためには、const_cast演算子を使う。

利用例
 例えばあるインターフェイスを作るとして、その時のパラメーターが stcuct Hoge * だったとする。
 どこかでmallocないしcallocあるいはstd::vectorなどをしてメモリーを確保し、そのポインターを受け渡して利用することになるだろう。
 こういったC的なインターフェイスはよくあり、C++でも使われている。ただ場合によっては、より多くの情報を保持しておく必要な生じることもある。この場合、stcuct hogeを先頭に含む構造体を用意し、追加の情報を保持する手法が古くから使われている。
stcuct Hogehoge {
    stcuct Hoge hoge;
    struct Fuga fuga;
};
 こうすると、この構造体のポインターを stcuct hoge * として受け渡せば、そのインターフェイスにこの情報を渡すことができる。またこのようにして定義された stcuct hoge * から追加の情報にアクセスしたい場合はキャストすることになる。
 この場合、Cなら通常のキャストを使用するが、C++なら reinterpret_cast が利用できる。
struct Hogehoge *hogehoge = reinterpret_cast<struct Hogehoge *>(hoge);
hogehoge->fuga.fugafuga += 123;

再検索