reinterpret_cast 연산자
모든 포인터를 다른 포인터 형식으로 변환 될 수 있습니다.또한 임의의 포인터 형식으로 또는 그 반대로 변환할 수 있는 정수 계열 형식이 있습니다.
reinterpret_cast < type-id > ( expression )
설명
오용의 reinterpret_cast 연산자 수 있습니다 쉽게 안전 하지 않은.원하는 변환이 기본적으로 낮은 수준의 아니면 캐스트 연산자 중 하나를 사용 해야 합니다.
reinterpret_cast 같은 변환을 사용 하 여 연산자를 사용 char* 에 int*, 또는 One_class* 에 Unrelated_class*, 기본적으로 안전 하지 않은.
결과 reinterpret_cast 원래 형식으로 다시 캐스팅 되 고 이외에 안전 하 게 사용할 수 없습니다.다른 용도, nonportable입니다.
reinterpret_cast 연산자 떨어져 캐스팅할 수 없습니다의 const, volatile, 또는 >__unaligned 특성입니다.참조 하십시오 const_cast 연산자 이러한 특성을 제거 하는 방법에 대 한.
reinterpret_cast 연산자 대상 형식의 null 포인터 값을 null 포인터 값을 변환 합니다.
실질적인 사용 reinterpret_cast 에 매핑되는 값 색인 하는 방식으로 서로 다른 두 값 거의 끝까지 동일한 인덱스와 해시 함수입니다.
// 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 포인터를 정수 계열 형식으로 취급 될 수 있습니다.결과 다음 비트-이동 하 고 (고유 높은 확률)는 고유 인덱스를 만들기 위해 자체와 약하게 암호화 합니다.다음 인덱스를 해당 함수의 반환 형식으로 캐스팅할 C 표준 스타일으로 잘립니다.