reinterpret_cast 연산자
포인터가 다른 포인터 형식으로 변환될 수 있도록 합니다. 또한 정수 계열 형식이 포인터 형식으로 변환될 수 있도록 하고 그 반대로도 변환될 수 있도록 합니다.
구문
reinterpret_cast < type-id > ( expression )
설명
운영자의 오용은 reinterpret_cast
쉽게 안전하지 않을 수 있습니다. 원하는 변환이 본질적으로 낮은 수준이 아닌 한 다른 캐스트 연산자 중 하나를 사용해야 합니다.
연산자는 reinterpret_cast
One_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 스타일 캐스트를 통해 함수의 반환 형식으로 잘립니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기