C++ 에는 reinterpret cast 가 있다. 형변환의 한 종류이며 포인터 타입끼리 형변환을 할 때 사용한다.
다음과 같이 포인터 또는 참조의 형태를 캐스팅할 때 reinterpret cast
를 사용한다.
int main(void) {
float a = 420.042f;
void *b = &a;
int *c = reinterpret_cast<int *>(b);
int &d = reinterpret_cast<int &>(b);
return 0;
}
C
에서는 포인터 형태로 캐스팅할 때 묵시적인 경우에도 컴파일을 허용했다. 하지만 C++
에서는 에러가 발생한다.
묵시적 캐스팅 컴파일 성공
#include <stdio.h>
int main(void) {
float a = 420.042f;
void *b = &a;
int *c = b;
int *d = (int *)b;
return (0);
}
포인터와 참조 두 경우 모두 묵시적 캐스팅에 대하여 컴파일 실패
int main(void) {
float a = 420.042f;
void *b = &a;
int *c = reinterpret_cast<int *>(b);
int &d = reinterpret_cast<int &>(b);
int *e = b; // 에러
int &f = b; // 에러
return 0;
}