reinterpret_cast 연산자reinterpret_cast Operator

포인터가 다른 포인터 형식으로 변환될 수 있도록 합니다.Allows any pointer to be converted into any other pointer type. 또한 정수 계열 형식이 포인터 형식으로 변환될 수 있도록 하고 그 반대로도 변환될 수 있도록 합니다.Also allows any integral type to be converted into any pointer type and vice versa.

구문Syntax

reinterpret_cast < type-id > ( expression )

설명Remarks

연산자의 오용은 reinterpret_cast 안전 하지 않을 수 있습니다.Misuse of the reinterpret_cast operator can easily be unsafe. 원하는 변환이 본질적으로 낮은 수준이 아닌 한 다른 캐스트 연산자 중 하나를 사용해야 합니다.Unless the desired conversion is inherently low-level, you should use one of the other cast operators.

연산자는 기본적으로 reinterpret_cast char* int* One_class* 안전 하지 않은 (예:) 또는로의 변환에 사용할 수 있습니다 Unrelated_class* .The reinterpret_cast operator can be used for conversions such as char* to int*, or One_class* to Unrelated_class*, which are inherently unsafe.

의 결과는 reinterpret_cast 원래 형식으로 다시 캐스팅 되는 것 외에는 안전 하 게 사용할 수 없습니다.The result of a reinterpret_cast cannot safely be used for anything other than being cast back to its original type. 다른 용도로 사용하는 경우에는 기껏해야 이식할 수 없는 결과가 생성됩니다.Other uses are, at best, nonportable.

reinterpret_cast 연산자는 const , volatile 또는 특성으로 캐스트할 수 없습니다 __unaligned .The reinterpret_cast operator cannot cast away the const, volatile, or __unaligned attributes. 이러한 특성을 제거 하는 방법에 대 한 자세한 내용은 Const_cast 연산자 를 참조 하세요.See const_cast Operator for information on removing these attributes.

reinterpret_cast 연산자는 null 포인터 값을 대상 형식의 null 포인터 값으로 변환 합니다.The reinterpret_cast operator converts a null pointer value to the null pointer value of the destination type.

reinterpret_cast 해시 함수에 있습니다 .이 함수는 두 개의 고유 값이 동일한 인덱스로 끝나지 않는 방식으로 값을 인덱스에 매핑합니다.One practical use of reinterpret_cast is in a hash function, which maps a value to an index in such a way that two distinct values rarely end up with the same index.

#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 사용 하면 포인터를 정수 계열 형식으로 처리할 수 있습니다.The reinterpret_cast allows the pointer to be treated as an integral type. 결과는 비트 이동되고 자신과 XOR 연산이 수행되어 고유한 인덱스(높은 확률로 고유함)를 생성합니다.The result is then bit-shifted and XORed with itself to produce a unique index (unique to a high degree of probability). 이 인덱스는 표준 C 스타일 캐스트를 통해 함수의 반환 형식으로 잘립니다.The index is then truncated by a standard C-style cast to the return type of the function.

참고 항목See also

캐스팅 연산자Casting Operators
키워드Keywords