reinterpret casting

😎·2023년 1월 14일
0

CPP

목록 보기
32/46

reinterpret cast

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 에서는 포인터 형태로 캐스팅할 때 묵시적인 경우에도 컴파일을 허용했다. 하지만 C++ 에서는 에러가 발생한다.

C

묵시적 캐스팅 컴파일 성공

#include <stdio.h>

int main(void) {
  float a = 420.042f;

  void *b = &a;
  int *c = b;
  int *d = (int *)b;

  return (0);
}

C++

포인터와 참조 두 경우 모두 묵시적 캐스팅에 대하여 컴파일 실패

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;
}

profile
jaekim

0개의 댓글