reinterpret_cast

http://www.geocities.jp/ky_webid/cpp/language/024.html

reinterpret_castというキャストが出てきました。

これなんて読むんでしょうか。りいんたーぷれっと?

日本語読みは再解釈キャストというらしいです。

異なる型同士へのキャストを行えるようです。C言語的なキャストまんまですね。

ほとんどの使い道としては整数値をアドレスとみなしてポインタ変数へ代入したいとかですかね。

#include <iostream>
using namespace std;

int main () {
    int i = 123456;
    
    // pポインタのアドレスを123456へ向ける
    int* p = reinterpret_cast<int*>( i );
    
    return 0;
}

ポインタ型から別のポインタ型への変換でもreinterpret_castが使えますが、void*型から別のポインタ型への変換の場合はstatic_castでもコンパイルエラーとならずに変換できるので、そのケースではstatic_castを使ったほうが良いようです。

#include <iostream>
using namespace std;

int main () {
    int* i  = new int(9);
    void* p = i;
    
    float* f = static_cast<float*>( p );
    
    return 0;
}