항목 2 : 가능한 C++ 스타일의 캐스트를 즐겨 쓰자

개념 정리
1급 기피 대상 : goto 문, cast문(형변환)
C++ 캐스팅 변환 사용 법 : http://ikpil.tistory.com/262 참조

이유
1. C스타일의 캐스트는 어떤 타입을 다른 타입으로 한방에 바꾸어 주는 괴물이다.
2. 눈으로 찾아 내기가 힘들다.

해결방법
1. 캐스팅 변환환을 쓸때는 C++ 스타일로 쓰자

주의점
1. 캐스팅 변환을 쓸때만 쓰는것이지 즐겨 쓰라는것이 아니다. 써야지만 할수 있을때 이렇게 쓰라는것이다.
2. 함수 포인터를 형변환은 목에 칼이 들어 올 경우가 아니라면 쓰지 말아라.(항목 31에서 자세하게 설명해준다고함)

개인적인 설명
캐스팅 변환 요약
static_cast : int를 double로.. 이런 류만 가능
dynamic_cast : 상속관계에 있는 클래스를 다운 캐스팅 할 경우 사용 할수 있다.(가상 함수가 있는것만 가능)
const_cast : 상수성을 제거하거나 추가 할수 있다.
reinterpret_cast : 서로 연관관계가 없는 포인터 변환을 해준다.

익숙해 지면 오히려 더 편하다. 난 아직 실력이 미숙하여, 캐스팅 변환이 좀 있는 편이다.

추가 : 2008/05/14 23:31
static_cast 는 포인터에 대한 형을 변화 시킬수가 있으데, 그 제한이 있다.
첫째, 상속관계가 있는 클래스로 포인터를 변경할수 있다.
둘째, VOID형 포인터를 다른형 포인터로 변환하거나 다른 포인트를 VOID 형 포인터로 변환시킬수 있다

하지만 이 제한은 무조건 형을 변환 시키는 것이기 때문에 컴파일 타임에서 에러가 나지 않는다. 그래서 오류가 발생했을 경우 위험하다.

dynamic_cast는 런타임중 형을 체크하고, 형 변환이 되지 않을 경우 널포인터를 반환하기 때문에 확인작업이 가능해 진다. 하지만 형 체크하는것에 많은 성능이 소비되는 단점이 있다.

static_cast의 장점과 dynamic_cast 의 장점을 서로 조합하여 사용한다면, 좋을것 같다는 생각을 한다.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요