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