항목 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 의 장점을 서로 조합하여 사용한다면, 좋을것 같다는 생각을 한다.
개념 정리
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 의 장점을 서로 조합하여 사용한다면, 좋을것 같다는 생각을 한다.
'책 정리 > More Effective C++ 1판' 카테고리의 다른 글
항목 9 : 리소스 누수를 피하는 방법의 정공은 소멸자이다. (0) | 2008.05.16 |
---|---|
궁극의 예외처리 (0) | 2008.05.16 |
항목 8 : new 와 delete의 의미를 정확히 구분하고 이해하자 (0) | 2008.05.15 |
항목 7 : &&, ||, 혹은 , 연산자는 오버로딩 대상이 절대로 아니다 (1) | 2008.05.15 |
항목 6 : 증가 및 감소 연산자의 전위/후위 형태를 반드시 구분하자 (0) | 2008.05.15 |
항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자. (0) | 2008.05.15 |
항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자. (0) | 2008.05.15 |
항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다. (0) | 2008.05.14 |
항목 1 : 포인터와 참조자를 구분하자 (0) | 2008.05.14 |
이 책은.. (0) | 2008.05.14 |
최근댓글