C++에서는 static_cast, const_cast, dynamic_cast, reinterpret_cast의 4가지 casting이 지원된다. 사용 형식은 다음과 같다.
xxxxx_cast<type>(value)
- const_cast : 상수 객체나 상수 포인터의 상수성을 제거하려는 목적을 갖는다.
- dynamic_cast : 상위 클래스의 포인터에서 하위 클래스의 포인터로 변환하는 것을 뜻한다. 이 때, 변환에 성공한 경우(즉, 원래의 포인터가 조상 클래스의 포인터인 경우)에는 유효한 포인터가 제대로 리턴되고, 실패한 경우(두 포인터 타입 간에 연관이 없는 경우)에는 NULL이 리턴된다. dynamic_cast보다는 virtual 함수를 사용하는 것이 원래는 더 깔끔한 방법이지만, 라이브러리 안에 들어있는 클래스들이라서 직접 소스 수정이 불가능하다거나한 경우에는 이것을 사용한다(static_cast보다는 안전하다). - Effective C++ 항목 39 참조.
- reinterpret_cast : 함수 포인터 타입을 형변환하는 것과 같이 구현에 따라 달라지는 결과를 위한 형변환을 목적으로 사용된다. 또한, 포인터 형변환 시에 static_cast로는 불가능한 경우에 사용할 수 있다(예 : void*를 Student*로 바꾼다거나..)
- static_cast : 일종의 잡동사니 형변환이다. 어떤 형변환도 적합치 않을 때 사용할 수 있다. 의미상으로 볼 때는 기존 C의 형변환에 해당한다.
기존의 형변환도 그대로 사용되지만 새로운 형태의 형변환을 사용하는 것이 좋다. 코드에서 찾아보기도 쉽고 (사람뿐만 아니라 grep 같은 툴에게도 쉽다.) 보다 전문화된 목적의 형변환 형태가 컴파일러가 사용 에러를 진단하는 것을 가능하게도 해주기 때문이다.
'Programming > 이것저것' 카테고리의 다른 글
Virtual Function (0) | 2010.03.18 |
---|---|
Virtual Destructor (0) | 2010.03.18 |
try/catch와 if/else의 차이점 (0) | 2010.03.18 |
#pragma pack (0) | 2010.03.18 |
#define swap (0) | 2010.03.18 |