В 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
вам здесь не поможет.