reinterpret_cast (Operador)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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.

reinterpret_cast < type-id > ( expression )  

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 deshacer la conversión de los atributos const, volatile o __unaligned. Vea const_cast (Operador) para obtener información sobre cómo quitar estos atributos.

El operador reinterpret_cast convierte un valor de puntero NULL al valor de puntero NULL 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.

Operadores de conversión
Palabras clave de C++

Mostrar: