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.
Syntaxe
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í.
Operátor reinterpret_cast
lze použít pro převody, například char*
na int*
, nebo One_class*
do Unrelated_class*
, které jsou ze své podstaty nebezpečné.
Výsledek nelze bezpečně použít pro cokoli jiného reinterpret_cast
než přetypování na původní typ. Jiná použití jsou v nejlepším případě nepřenositelná.
Operátor reinterpret_cast
nemůže přetypovat const
, volatile
nebo __unaligned
atributy. Informace o odebrání těchto atributů najdete v části const_cast – operátor .
Operátor reinterpret_cast
převede hodnotu ukazatele null na hodnotu nulového ukazatele cílového typu.
Jedním z praktických použití reinterpret_cast
je funkce hash, která mapuje hodnotu na index tak, aby dvě odlišné hodnoty zřídka skončily 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
Umožňuje reinterpret_cast
, aby byl ukazatel považován za celočíselný typ. 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro