const casting

😎·2023년 1월 14일
0

CPP

목록 보기
33/46

const_cast

const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거하는데 사용한다.

const 로 선언한 변수는 원래 수정이 불가능하다. 하지만 const_cast 를 함으로써 수정을 가능하게 할 수 있다. 예시를 보자.


예시

포인터

const_cast 전에 *b = 15 로 값을 변경하려 했더니, 에러가 발생한다.

int main(void) {
  int a = 10;

  const int *b = &a;
  std::cout << *b << std::endl;
  *b = 15; // 에러
  int *d = const_cast<int *>(b);
  std::cout << *d << std::endl;
  *d = 15;
  std::cout << *d << std::endl;

  return 0;
}

하지만 int *d = const_cast<int *>(b); 로 캐스팅하고 난 후에는 *d = 15 로 변경 가능하다.

int main(void) {
  int a = 10;

  const int *b = &a;
  std::cout << *b << std::endl;
  // *b = 15;
  int *d = const_cast<int *>(b);
  std::cout << *d << std::endl;
  *d = 15;
  std::cout << *d << std::endl;

  return 0;
}

참조

참조에서도 에러가 발생한다.

int main(void) {
  int a = 10;

  const int &b = a;
  std::cout << b << std::endl;
  b = 15; // 에러
  int &d = const_cast<int &>(b);
  std::cout << d << std::endl;
  d = 15;
  std::cout << d << std::endl;

  return 0;
}

하지만 const_cast 를 한 후에는 변화 가능한 것을 볼 수 있다.

int main(void) {
  int a = 10;

  const int &b = a;
  std::cout << b << std::endl;
  // b = 15;
  int &d = const_cast<int &>(b);
  std::cout << d << std::endl;
  d = 15;
  std::cout << d << std::endl;

  return 0;
}

profile
jaekim

0개의 댓글