оператор reinterpret_cast
Позволяет любой указатель, которое необходимо преобразовать в любой другой тип указателя.Также позволяет любой целочисленный тип, который необходимо преобразовать в любой тип указателя и наоборот.
reinterpret_cast < type-id > ( expression )
Заметки
Неверное использование reinterpret_cast оператор легко может быть является небезопасным.Если нужное преобразование не будет низкоуровнево по существу, необходимо использовать один из других операторов приведения.
reinterpret_cast оператор может использоваться для преобразования как char* В int*или One_class* В Unrelated_class*по существу, который является небезопасным.
Результат a reinterpret_cast не удалось безопасно использоваться для какой-либо областью, кроме быть приведения обратно к своему исходному типу.Также используется в лучшем случае - значение nonportable.
reinterpret_cast оператор не может привести прочь Const" volatileили __unaligned атрибуты.См. оператор const_cast дополнительные сведения об удалении этих атрибутов.
reinterpret_cast оператор преобразует значение пустого указателя в значение нулевого указателя целевого типа.
Одна практических использование reinterpret_cast в хэш-функции, которое сопоставляет значение для индексации таким образом 2, определенных значений редко перемещается с таким же индексом.
// expre_reinterpret_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>
// 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;
}
reinterpret_cast разрешает указатель как объединенный тип.Результат затем бит-сдвиганн с самим собой и XORed для формирования уникального индекса (unique к высокой степени вероятности).Индекс затем усекается стандартным приведением в стиле к возвращаемому типу функции.