reinterpret_cast-Operator
Ermöglicht, dass ein beliebiger Zeiger in einen anderen Zeigertyp konvertiert wird. Ermöglicht es außerdem, einen beliebigen ganzzahligen Typ in einen beliebigen Zeigertyp und umgekehrt zu konvertieren.
Syntax
reinterpret_cast < type-id > ( expression )
Hinweise
Missbrauch des reinterpret_cast
Betreibers kann leicht unsicher sein. Sofern nicht die gewünschte Konvertierung grundsätzlich auf niedriger Ebene stattfindet, sollten Sie einen der anderen Umwandlungsoperatoren verwenden.
Der reinterpret_cast
Operator kann für Konvertierungen wie char*
z. B. in int*
oder One_class*
in Unrelated_class*
, die inhärent unsicher sind, verwendet werden.
Das Ergebnis eines nicht reinterpret_cast
sicheren Verwendungsergebnisses für andere Elemente als das Zurückwechseln in den ursprünglichen Typ. Andere Verwendungsmöglichkeiten sind bestenfalls nicht portierbar.
Der reinterpret_cast
Operator kann die const
Attribute volatile
oder __unaligned
Attribute nicht entfernen. Informationen zum Entfernen dieser Attribute finden Sie unter const_cast Operator .
Der reinterpret_cast
Operator konvertiert einen Nullzeigerwert in den Nullzeigerwert des Zieltyps.
Eine praktische Verwendung reinterpret_cast
erfolgt in einer Hashfunktion, die einem Index einen Wert so zuordnet, dass zwei unterschiedliche Werte selten mit demselben Index enden.
#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
Der reinterpret_cast
Zeiger kann als integraler Typ behandelt werden. Das Ergebnis ist dann eine Bitverschiebung oder ein XOR-Vorgang, um einen eindeutigen Index zu erstellen (eindeutig mit hoher Wahrscheinlichkeit). Der Index wird dann von einer standardmäßigen Umwandlung im C-Format in den Rückgabetyp der Funktion abgeschnitten.
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für