Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis 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 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.