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ć const
atrybutów , volatile
lub __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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla