|
reinterpret_cast은 강제적으로 캐스팅한다는 의미입니다.
: int i = reinterpret_cast<int>(v); //여기 의미를 알고 싶퍼요?
이건
int i = int(v); 또는 int i=(int)i;
같은 의미입니다.
참고로,
static_cast와 reinterpret_cast의 차이점에 대한 자료입니다. 이걸 보시면 아래 의문사항들이 해결될 것입니다.
----
static_cast 는 캐스팅이 가능하면 캐스팅을 합니다.
즉 완전히 다른 타입은 캐스팅이 불가능하다는 겁니다.
클래스의 경우 Base클래스와 Derived 클래스가 있고 이것이 서로 상속관계일떄
static_cast<Base*>pDerived;
이런것이 가능하다는 겁니다.
하지만 완전히 다른 A, B 클래스가 있을 경우(상속관계마저 없습니다.)
static_cast 는 에러를 냅니다.
하지만 reinterpret_cast는 강제로 캐스팅을 해버리는거지요.
예를 들어 int형 변수를 char*형으로 캐스팅해서 int형 변수를 마치 char형 배열 4개 처럼 쓸수 있다는 겁니다.
간단히 생각하면 reinterpert -> 재 해석하다. 즉 그 변수가 차지하고 있는 변수 공간을 주어진 타입으로
재해석해버린다는 거죠.
하지만 static 은 이런 뜻 없습니다.
대박전설 님이 쓰신 글 :
: void func(void *v) {
: int i = reinterpret_cast<int>(v); //여기 의미를 알고 싶퍼요?
: }
:
: void main() {
: func(reinterpret_cast<void *>(5)); ////여기 의미를 알고 싶퍼요?
:
: typedef void (* PFV)();
:
: PFV pfunc = reinterpret_cast<PFV>(func); //여기 의미를 알고 싶퍼요?
:
: pfunc();
:
: }
: help 코드의 부분 입니다.
: 인테져 타입을 포인터로 바뀌는 부분이라는데.. 정확한 의미를 파악하고 싶퍼요
|