Dev

C++ 이야기 - [5] 캐스트 연산자 정리

prostars 2007. 10. 22. 01:01
글의 순서가 조금 이상한가?
각 캐스트 연산자를 소개하는 글이 먼저 올라가고 각 캐스트 연산자를 세부 설명하는 글이 뒤따라 하는 게 일반적인 순서일지도 모르겠다.
그다지 큰 계획을 세우고 쓰는 게 아니다 보니 순서가 조금 이상해도 이해해주기 바란다.
이미 C++ 캐스트 연산자에 대해서 좋은 글들이 많이 나와 있지만 사용하는 사람을 쉽게 볼 수는 없었기에 조금 더 쉽게 하나씩 접근하여 글을 적어보면 도움이 될까 싶어 글을 적어본 것인데 전달이 잘 되었나 모르겠다.

잠시 C 스타일의 캐스트 연산자를 보자.
(타입) 표현식
[예제 1]
const char* pConstCharPtr = "test";
int* pIntPtr1 = NULL;
int* pIntPtr2 = NULL;
int* pIntPtr3 = NULL;

// 모두 캐스팅은 성공하지만 pIntPtr3 에 사용된 방식을 추천한다.
pIntPtr1 = (int*)pConstCharPtr;
pIntPtr2 = reinterpret_cast<int*>( const_cast<char*>( pConstCharPtr ) );
void* pTemp = const_cast<char*>( pConstCharPtr );
pIntPtr3 = static_cast<int*>( pTemp );
[예제 1] 에서 처럼 C 스타일의 캐스트 연산자는 만능이다.
얼핏 봐서는 저 캐스트 연산자가 포인터 타입만을 변환하고 있는지 상수성도 같이 날려버리고 있는지 쉽게 파악하기 어렵다.
C++ 스타일의 캐스트 연산자라면 용도별로 명확하게 사용해야 가능한 캐스팅을 단 한 방에 해결하고 있다.
More Effective C++ 항목 2에서는 C 스타일 캐스트 연산자의 문제를 다음과 같이 언급하고 있다.
C 스타일의 캐스트는 어떤 타입을 다른 타입으로 아무 생각 없이 바꾸어주는 괴물이나 마찬가지라는 것입니다.
const_cast 이야기에서 적은 글을 다시 적어본다.
정해진 용도가 명확한 것이 C++ 캐스트 연산자의 특징 중 하나다.
용도가 명확한 만큼 별도의 주석 없이 코드만으로 작성자의 의도가 쉽게 파악된다.
이런 만큼 C++ 스타일의 캐스트 연산자 사용을 적극 추천한다.

- 참고 자료 소개
2007/10/03 - [프로그래밍과 이것저것] - C++ 이야기 - [1] 캐스트 연산자 const_cast
2007/10/04 - [프로그래밍과 이것저것] - C++ 이야기 - [2] 캐스트 연산자 dynamic_cast
2007/10/14 - [프로그래밍과 이것저것] - C++ 이야기 - [3] 캐스트 연산자 static_cast
2007/10/15 - [프로그래밍과 이것저것] - C++ 이야기 - [4] 캐스트 연산자 reinterpret_cast
http://www.winapi.co.kr 에서 c/c++ 전반적인 내용을 모두 볼 수 있다.
반응형