En C++ reinterpret_cast
sólo puede realizar un conjunto específico de conversiones, que figuran explícitamente en el especificación del lenguaje En resumen, reinterpret_cast
solo puede realizar conversiones de puntero a puntero y conversiones de referencia a referencia (más conversiones puntero-a-entero y entero-a-puntero). Esto es coherente con la intención expresada en el nombre del elenco: está destinado a ser utilizado para la reinterpretación de puntero/referencia.
Lo que estás tratando de hacer no es la reinterpretación.Si quiere reinterpretar un int
como double
que lo tienes que convertirlo a un tipo de referencia
double y = reinterpret_cast<double&>(x);
aunque la reinterpretación basada en puntero equivalente es probablemente más explícita
double y = *reinterpret_cast<double*>(&x); // same as above
Nota sin embargo, que mientras que reinterpret_cast
puede convertir los tipos de referencia/puntero, el intento real de leer los datos a través de la referencia/puntero resultante produce un comportamiento indefinido.
Y en cualquier caso, esto, por supuesto, no se puede hacer mucho sentido en una plataforma con int
y double
de diferente tamaño (ya que en caso de mayor double
se lee más allá de la memoria ocupada por x
).
Por lo tanto, al final todo se reduce a lo que estaba tratando de lograr. Reinterpretación de la memoria? Véase más arriba. ¿Algún tipo de conversión más significativa de int
a double
? Si es así, reinterpret_cast
no lo ayudará aquí.
No he intentado esto en C++, así que solo estoy adivinando. ¿Funciona si lanzas para flotar? ¿No le gustaría que los dos tipos tengan una longitud de bit diferente? –
"' reinterpret_cast (x) '" ¿Qué esperaba que hiciera esta expresión? –
curiousguy
int es 32 bits. el doble es 64 bits. Ese podría ser el problema. ¿Puedes revisar? –