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 const
attributs. 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour