글의 순서가 조금 이상한가? 각 캐스트 연산자를 소개하는 글이 먼저 올라가고 각 캐스트 연산자를 세부 설명하는 글이 뒤따라 하는 게 일반적인 순서일지도 모르겠다. 그다지 큰 계획을 세우고 쓰는 게 아니다 보니 순서가 조금 이상해도 이해해주기 바란다. 이미 C++ 캐스트 연산자에 대해서 좋은 글들이 많이 나와 있지만 사용하는 사람을 쉽게 볼 수는 없었기에 조금 더 쉽게 하나씩 접근하여 글을 적어보면 도움이 될까 싶어 글을 적어본 것인데 전달이 잘 되었나 모르겠다.
// 모두 캐스팅은 성공하지만 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 스타일의 캐스트는 어떤 타입을 다른 타입으로 아무 생각 없이 바꾸어주는 괴물이나 마찬가지라는 것입니다.