Share via


reinterpret_cast, opérateur

Autorise la conversion de tout pointeur en tout autre type pointeur. Autorise également la conversion de tout type entier en tout type pointeur et vice versa.

Syntaxe

reinterpret_cast < type-id > ( expression )

Notes

L’utilisation incorrecte de l’opérateur reinterpret_cast peut facilement être dangereuse. À moins que la conversion souhaitée soit fondamentalement de bas niveau, vous devez utiliser l'un des autres opérateurs de cast.

L’opérateur reinterpret_cast peut être utilisé pour les conversions telles que char* , int*ou One_class* vers Unrelated_class*, qui sont intrinsèquement dangereuses.

Le résultat d’un reinterpret_cast ne peut pas être utilisé en toute sécurité pour quelque chose d’autre que de revenir à son type d’origine. Les autres utilisations sont, au mieux, non portables.

L’opérateur reinterpret_cast ne peut pas convertir les attributs ou volatile__unaligned les constattributs. Pour plus d’informations sur la suppression de ces attributs, consultez const_cast Opérateur .

L’opérateur reinterpret_cast convertit une valeur de pointeur Null en valeur de pointeur Null du type de destination.

Une utilisation pratique est dans une fonction de reinterpret_cast hachage, qui mappe une valeur à un index de telle façon que deux valeurs distinctes se retrouvent rarement avec le même index.

#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

Le reinterpret_cast pointeur peut être traité comme un type intégral. Le résultat binaire est alors déplacé et soumis à une opération XOR avec lui-même pour produire un index unique (à un niveau de probabilité élevé). L’index est ensuite tronqué par un cast de style C standard en type de retour de la fonction.

Voir aussi

Opérateurs de casting
Mots clés