Udostępnij za pośrednictwem


Operator reinterpret_cast

Umożliwia wszelkie wskaźnik do przekonwertowania na inny typ wskaźnika.Ponadto pozwala określić dowolnego typu integralną do przekonwertowania do dowolnego typu wskaźnik i na odwrót.

reinterpret_cast < type-id > ( expression )

Uwagi

Nieprawidłowe użycie reinterpret_cast operator łatwo może być niebezpieczne.Momentu konwersji żądane założenia niskiego poziomu, należy użyć jednej z innych operatorów rzutowania.

reinterpret_cast Operator może służyć do konwersji takich jak char* do int*, lub One_class* do Unrelated_class*, które są założenia niebezpieczny.

Wynik reinterpret_cast bezpiecznie nie można używać do wszelkich innych niż jest rzutowany oryginalnego typu.Innych zastosowań są, co najwyżej nonportable.

reinterpret_cast Operatora nie można rzutować między stała, volatile, lub __unaligned atrybutów.Zobacz Operator const_cast, aby uzyskać informacje na temat usuwania tych atrybutów.

Operator reinterpret_cast konwertuje wartość pustego wskaźnika do wartości pustego wskaźnika typu miejsca docelowego.

Jeden praktyczne wykorzystanie reinterpret_cast w funkcji skrótu, które map, a wartość indeksu w taki sposób, że dwa różne wartości rzadko zakończenia w górę się ten sam indeks.

#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

reinterpret_cast Umożliwia wskaźnik powinien być traktowany jako typu całkowitego.Wynik jest następnie bit przesunięte i XORed ze sobą do tworzenia unikatowego indeksu (unikatowe na wysoki stopień prawdopodobieństwo).Indeks jest następnie obcięty przez standardowy C-style rzutowany na typ zwrotny funkcji.

Zobacz też

Informacje

Operatory rzutowania

Słowa kluczowe języka C++