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;
関連する用語
C++
static_cast
const_cast

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club