Operador reinterpret_cast

Permite que qualquer ponteiro seja convertido em outro tipo de ponteiro. Também permite que qualquer tipo integral seja convertido em qualquer tipo de ponteiro e vice-versa.

Sintaxe

reinterpret_cast < type-id > ( expression )

Comentários

O uso incorreto do operador reinterpret_cast pode ser facilmente inseguro. A menos que a conversão desejada seja inerentemente de nível baixo, você deve usar um dos outros operadores de conversão.

O operador reinterpret_cast pode ser usado para conversões como char* a int*, ou One_class* a Unrelated_class*, que é inerentemente inseguro.

O resultado de reinterpret_cast não pode ser usado com segurança para algo diferente de ser convertido de volta ao seu tipo original. Outros usos são, na melhor das hipóteses, não portáteis.

O operador reinterpret_cast não pode eliminar os atributos const, volatile ou __unaligned. Confira Operador const_cast para obter informações sobre como remover esses atributos.

O operador reinterpret_cast converte um valor de ponteiro nulo em valor de ponteiro nulo do tipo de destino.

Um uso prático de reinterpret_cast está em uma função de hash, que mapeia um valor a um índice de modo que dois valores distintos raramente terminam acima com o mesmo índice.

#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

O reinterpret_cast permite que o ponteiro é tratado como um tipo integral. O resultado de bit é deslocado e recebe XOR para gerar um índice exclusivo (exclusivo para um alto nível de probabilidade). O índice é truncado em seguida por uma conversão padrão do estilo C para o tipo de retorno de função.

Confira também

Operadores de conversão
Palavras-chave