In C++ reinterpret_cast
can only perform a specific set of conversions, explicitly listed in the language specification. In short, reinterpret_cast
can only perform pointer-to-pointer conversions and reference-to-reference conversions (plus pointer-to-integer and integer-to-pointer conversions). This is consistent with the intent expressed in the very name of the cast: it is intended to be used for pointer/reference reinterpretation.
What you are trying to do is not reinterpretation. If you want to reinterpret an int
as a double
you'd have to convert it to a reference type
double y = reinterpret_cast<double&>(x);
although the equivalent pointer-based reinterpretation is probably more explicit
double y = *reinterpret_cast<double*>(&x); // same as above
Note though, that while reinterpret_cast
can convert the reference/pointer types, the actual attempt to read the data through the resultant reference/pointer produces undefined behavior.
And in any case this, of course, can't make much sense on a platform with int
and double
of different size (since in case of larger double
you will read beyond the memory occupied by x
).
So, in the end it all boils down to what you were trying to achieve. Memory reinterpretation? See above. Some kind of more meaningful int
to double
conversion? If so, reinterpret_cast
won't help you here.
reinterpret_cast<double>(x)
" What did you expected this expression to do? – Microbefloat
? There's nofloat
in your code snippet. – Idelson