C ++ではreinterpret_cast
、言語仕様に明示的にリストされている特定の変換セットのみを実行できます。つまり、reinterpret_cast
ポインタからポインタへの変換と参照から参照への変換(およびポインタから整数への変換と整数からポインタへの変換)のみを実行できます。これは、キャストの名前そのもので表現されている意図と一致しています。これは、ポインター/参照の再解釈に使用することを目的としています。
あなたがやろうとしていることは、再解釈ではありません。int
をとして再解釈したい場合はdouble
、それを参照型に変換する必要があります
double y = reinterpret_cast<double&>(x);
同等のポインタベースの再解釈はおそらくより明確ですが
double y = *reinterpret_cast<double*>(&x); // same as above
ただし、reinterpret_cast
参照/ポインター型を変換することはできますが、結果の参照/ポインターを介してデータを読み取ろうとすると、未定義の動作が発生することに注意してください。
そして、いずれにせよ、もちろん、これは、サイズが異なるプラットフォームではあまり意味がありません(大きい場合はint
、占有されているメモリを超えて読み取るため)。double
double
x
つまり、最終的には、達成しようとしていたことになります。記憶の再解釈?上記を参照。変換にとってもっと意味のあるものはありint
ますか?double
もしそうなら、reinterpret_cast
ここであなたを助けません。