reinterpret_cast 연산자

포인터가 다른 포인터 형식으로 변환될 수 있도록 합니다. 또한 정수 계열 형식이 포인터 형식으로 변환될 수 있도록 하고 그 반대로도 변환될 수 있도록 합니다.

구문

reinterpret_cast < type-id > ( expression )

설명

운영자의 오용은 reinterpret_cast 쉽게 안전하지 않을 수 있습니다. 원하는 변환이 본질적으로 낮은 수준이 아닌 한 다른 캐스트 연산자 중 하나를 사용해야 합니다.

연산자는 reinterpret_castOne_class*char*int*Unrelated_class*본질적으로 안전하지 않은 변환에 사용할 수 있습니다.

원래 형식으로 reinterpret_cast 다시 캐스팅되는 것 이외의 다른 용도로는 결과를 안전하게 사용할 수 없습니다. 다른 용도로 사용하는 경우에는 기껏해야 이식할 수 없는 결과가 생성됩니다.

연산자는 reinterpret_cast , volatile또는 __unaligned 특성을 캐스팅const할 수 없습니다. 이러한 특성을 제거하는 방법에 대한 자세한 내용은 const_cast Operator를 참조하세요.

reinterpret_cast 연산자는 null 포인터 값을 대상 형식의 null 포인터 값으로 변환합니다.

실제로 사용하는 reinterpret_cast 것은 두 개의 고유 값이 거의 동일한 인덱스로 끝나지 않는 방식으로 값을 인덱스로 매핑하는 해시 함수입니다.

#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

포인터 reinterpret_cast 를 정수 형식으로 처리할 수 있습니다. 결과는 비트 이동되고 자신과 XOR 연산이 수행되어 고유한 인덱스(높은 확률로 고유함)를 생성합니다. 이 인덱스는 표준 C 스타일 캐스트를 통해 함수의 반환 형식으로 잘립니다.

참고 항목

캐스팅 연산자
키워드