Поделиться через


оператор 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 к высокой степени вероятности).Индекс затем усекается стандартным приведением в стиле к возвращаемому типу функции.

См. также

Ссылки

Операторы приведения

Ключевые слова C++