ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
C++の予約語の一つ。
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;
コメントなどを投稿するフォームは、日本語対応時のみ表示されます