opérateur de reinterpret_cast
Permet un pointeur à convertir en un autre type pointeur.Permet également tout type entier à convertir en un type pointeur et vice versa.
reinterpret_cast < type-id > ( expression )
Notes
L'utilisation incorrecte de l'opérateur d' reinterpret_cast peut être facilement non sécurisé.À moins que la conversion souhaitée est fondamentalement de bas niveau, vous devez utiliser l'un des autres opérateurs de cast.
L'opérateur d' reinterpret_cast peut être utilisé pour les conversions telles que char* à int*, ou l' One_class* à Unrelated_class*, qui sont fondamentalement non sécurisées.
Le résultat d' reinterpret_cast ne peut pas sans risque être utilisé pour une valeur autre que être casté vers son type d'origine.d'autres utilisations sont, au mieux, nonportable.
L'opérateur d' reinterpret_cast ne peut pas effectuer un cast loin const, volatile, les attributs ou de __unaligned .Consultez l' opérateur de const_cast pour plus d'informations sur supprimer ces attributs.
L'opérateur d' reinterpret_cast convertit une valeur de pointeur null à la valeur du pointeur null du type de destination.
Une utilisation pratique d' reinterpret_cast est dans une fonction de hachage, qui mappe une valeur à un index de telle sorte que deux valeurs distinctes se terminent rarement avec le même index.
// expre_reinterpret_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>
// 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;
}
reinterpret_cast permet le pointeur à traiter comme un type intégral.Le résultat bit-est alors déplacé et XORed avec elle-même pour produire un index unique (à un niveau élevé de la probabilité).L'index est ensuite tronqué par un cast de style C standard dans le type de retour de la fonction.