reinterpret_cast – operátor

Umožňuje převod všech ukazatelů na jiný typ ukazatele.Umožňuje také převést libovolný integrální typ na libovolný typ ukazatele a naopak.

reinterpret_cast < type-id > ( expression )

Poznámky

Zneužití operátoru reinterpret_cast může být snadno nebezpečné.Pokud není požadovaný převod ze své podstaty nižší úrovně, měly by být použity ostatní operátory přetypování.

Pro převody, jako jsou char* na int* nebo One_class* na Unrelated_class*, které jsou ze své podstaty nebezpečné, lze použít operátor reinterpret_cast.

Výsledek reinterpret_cast nelze bezpečně používat pro nic jiného než pro zpětné přetypování do původního stavu.Jiná použití jsou v nejlepším případě nepřenositelná.

Operátor reinterpret_cast neumí přetypovat pryč atributy const, volatile ani __unaligned.Viz Operátor const_cast pro informace o odebírání těchto atributů.

Operátor reinterpret_cast převede hodnotu ukazatele null na hodnotu typu null cílového typu.

Jedno praktické použití reinterpret_cast je ve funkci hash, která mapuje hodnotu na index tak, že dvě odlišné hodnoty zřídkakdy skončí se stejným indexem.

#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žňuje zacházet s ukazatelem jako s integrálním typem.Výsledek je následně bitově posunutý a je na něj použita logická funkce XOR, aby se vytvořil jedinečný index (jedinečný s vysokým stupněm pravděpodobnosti).Index je následně zkrácen standardem přetypování ve stylu jazyka C na návratový typ funkce.

Viz také

Referenční dokumentace

Operátory přetypování

Klíčová slova jazyka C++