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 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.

Siehe auch

Umwandlungsoperatoren
Schlüsselwörter