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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de