Freigeben über


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.

reinterpret_cast < type-id > ( expression )

Hinweise

Eine falsche Verwendung des Operators reinterpret_cast kann schnell zu einem erhöhten Sicherheitsrisiko führen. Sofern nicht die gewünschte Konvertierung grundsätzlich auf niedriger Ebene stattfindet, sollten Sie einen der anderen Umwandlungsoperatoren verwenden.

Der Operator reinterpret_cast kann z. B. für Konvertierungen von char* in int* oder One_class* in Unrelated_class* verwendet werden, die grundsätzlich unsicher sind.

Das Ergebnis von reinterpret_cast kann nur für die Umwandlung zurück in den ursprünglichen Typ sicher verwendet werden. Andere Verwendungsmöglichkeiten sind bestenfalls nicht portierbar.

Der Operator reinterpret_cast kann die AttributeConst, volatile oder __unaligned nicht umwandeln. Weitere Informationen über das Entfernen dieser Attribute finden Sie unter const_cast-Operator.

Der reinterpret_cast-Operator konvertiert einen NULL-Zeigerwert in den NULL-Zeigerwert des Zieltyps.

Eine praktische Verwendung von reinterpret_cast besteht in einer Hashfunktion, die einen Wert einem Index so zuordnet, dass zwei verschiedene Werte am Ende selten den gleichen Index aufweisen.

#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

Mit reinterpret_cast kann der Zeiger als ganzzahliger 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

Referenz

Umwandlungsoperatoren

C++-Schlüsselwörter