Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
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 constAttribute volatileoder __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.