const_cast
const_cast
의 사용은 피하는 것이 좋다.
// C style
void Foo(const Animal *ptr)
{
Animal *animal = (Animal*)ptr;
animal->SetAge(5);
}
// C++ style
void Foo(const Animal *ptr)
{
Animal *animal = const_cast<Animal *>(ptr);
animal->SetAge(5);
}
const_cast
는 자료형을 바꿀 수 없으며, 오로지 const 또는 volatile 어트리뷰트를 제거할 때 사용된다.
Animal *myPet = new Cat(2, "Coco");
const Animal *petPtr = myPet;
// C style
Animal *myAnimal1 = (Animal*)petPtr; // OK
Cat *myCat1 = (Cat*)petPtr; // OK
// C++ style
Animal *myAnimal2 = const_cast<Animal*>(petPtr); // OK
Cat *myCat2 = const_cast<Cat*>(petPtr); // 컴파일 에러
const_cast
는 값을 변경하려는 의도를 명확하게 밝히는 캐스팅 방식이지만, 값은 언제나 복사되므로 주의가 필요하다.const_cast
를 코드에서 쓰려고 한다면 무언가 잘못 하고 있는 것이다!
void Foo(const char *name)
{
char *str = const_cast<char *>(name);
*str = 'p';
}
const_cast
를 사용할 때 주의할 점은 다음과 같다.- 써드파티 라이브러리가
const
를 제대로 사용하지 않을 때, 우리 프로그램에서 수정이 불가능한 외부 라이브러리가const
를 제대로 처리하지 않으면 해당 라이브러리를 사용할 때const_cast
를 사용해야 할 수도 있다.
- 써드파티 라이브러리가
'Language > C++' 카테고리의 다른 글
[C++] 29.Unmanaged Programming: 인라인 함수 (0) | 2024.01.31 |
---|---|
[C++] 28.Unmanaged Programming: dynamic_cast (1) | 2024.01.30 |
[C++] 26.Unmanaged Programming: reinterpret_cast (0) | 2024.01.30 |
[C++] 25.Unmanaged Programming: static_cast (0) | 2024.01.30 |
[C++] 24.Unmanaged Programming: 형변환(Casting) (0) | 2024.01.30 |