Udostępnij za pośrednictwem


Operator reinterpret_cast

Umożliwia przekonwertowanie dowolnego wskaźnika na dowolny inny typ wskaźnika. Umożliwia również konwersję dowolnego typu całkowitego na dowolny typ wskaźnika i na odwrót.

Składnia

reinterpret_cast < type-id > ( expression )

Uwagi

reinterpret_cast Nieprawidłowe użycie operatora może być łatwo niebezpieczne. Jeśli wymagana konwersja nie jest z natury niska, należy użyć jednego z innych operatorów rzutowania.

Operator reinterpret_cast może służyć do konwersji, takich jak char* , int*lub One_class* do Unrelated_class*, które są z natury niebezpieczne.

Wynik elementu reinterpret_cast nie może być bezpiecznie używany do niczego innego niż rzutowanie z powrotem do oryginalnego typu. Inne zastosowania są w najlepszym razie nieportowalne.

Operator reinterpret_cast nie może odrzucić constatrybutów , volatilelub __unaligned . Aby uzyskać informacje na temat usuwania tych atrybutów, zobacz const_cast Operator .

Operator reinterpret_cast konwertuje wartość wskaźnika null na wartość wskaźnika null typu docelowego.

Jednym z praktycznych zastosowań jest funkcja skrótu reinterpret_cast , która mapuje wartość na indeks w taki sposób, że dwie odrębne wartości rzadko kończą się tym samym indeksem.

#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

Wskaźnik reinterpret_cast umożliwia traktowanie wskaźnika jako typu całkowitego. Wynik jest następnie przesunięty bitowo i XORed z siebie w celu utworzenia unikatowego indeksu (unikatowego do wysokiego stopnia prawdopodobieństwa). Indeks jest następnie obcinany przez standardowe rzutowanie w stylu C do zwracanego typu funkcji.

Zobacz też

Operatory rzutowania
Słowa kluczowe