[C++] reinterpret_cast
reinterpret 의 뜻대로 캐스팅 하려는 것을 타겟의 타입으로 비트단위로 다시 재해석하는 casting 연산자이다.
다른 3개의 캐스팅 연산자가 처리하지 못한 일을 수행한다.
reinterpret_cast는 관계가 없는 타입간의 변환을 한다. 하지만, const_cast의 기능인 상수성을 없애는 일은 하지 못한다.
C연산자 만큼 casting이 자유롭지만 결과는 보장할 수 없다.
[예제 1]
error C2440: '=' : 'int'에서 'char *'(으)로 변환할 수 없습니다.
1> 정수 계열 형식에서 포인터 형식으로 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.
error C2440: 'static_cast' : 'int'에서 'char *'(으)로 변환할 수 없습니다.
1> 정수 계열 형식에서 포인터 형식으로 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.
컴파일 성공한 부분이 정수를 char* 타입으로 재해석 한 reinterpret_cast의 기본동작이다.
[예제 2]
아무런 관계가 없는 class 객체의 포인터 간에 reinterpret_cast가 성공하는 것을 볼 수 있다.
하지만, 위에서도 언급했듯 런타임 에러는 사전에 발견할 수 없다.
pAnimal->State(); 를 하면 Flower State가 출력된다.
이에 따라 pAnimal이 reinterpret_cast를 통해 Flower class 의 객체가 된 것을 알 수 있다.
[예제 3]
error C2440: 'reinterpret_cast' : 'const char *'에서 'char *'(으)로 변환할 수 없습니다.
1> 변환하면서 한정자가 손실됩니다.
reinterpret_cast 가 const_cast처럼 상수성을 없애주진 않는다.