Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Permite que cualquier puntero se convierta en cualquier otro tipo de puntero. También permite convertir cualquier tipo entero en cualquier tipo de puntero y viceversa.
Sintaxis
reinterpret_cast < type-id > ( expression )
Comentarios
El uso incorrecto del operador reinterpret_cast puede ser no seguro. A menos que la conversión deseada sea inherentemente de bajo nivel, se debe utilizar uno de los otros operadores de conversión.
El operador reinterpret_cast se puede utilizar para las conversiones como char* a int* o One_class* a Unrelated_class*, que son intrínsecamente no seguras.
El resultado de reinterpret_cast no se puede utilizar con seguridad para algo distinto que convertirlo otra vez a su tipo original. Otros usos son, en el mejor de los casos, no portables.
El operador reinterpret_cast no puede desechar los atributos const, volatile o __unaligned. Consulte el Operador const_cast para obtener información sobre cómo quitar estos atributos.
El operador reinterpret_cast convierte un valor de puntero nulo al valor de puntero nulo del tipo de destino.
Un uso práctico de reinterpret_cast es el que se hace en una función hash, que asigna un valor a un índice de tal forma que dos valores distintos raramente acaben teniendo el mismo índice.
#include <iostream>
using namespace std;
// Returns a hash code based on an address
unsigned short Hash( void *p ) {
unsigned int val = reinterpret_cast<unsigned int>( p );
return ( unsigned short )( val ^ (val >> 16));
}
using namespace std;
int main() {
int a[20];
for ( int i = 0; i < 20; i++ )
cout << Hash( a + i ) << endl;
}
Output:
64641
64645
64889
64893
64881
64885
64873
64877
64865
64869
64857
64861
64849
64853
64841
64845
64833
64837
64825
64829
reinterpret_cast permite que el puntero se tratará como tipo entero. El resultado se cambia a bits y se compara mediante XOR consigo mismo para producir un índice único (con un alto grado de probabilidad). El índice se trunca mediante una conversión de estilo de C al tipo de valor devuelto de la función.