본문 바로가기

프로그램언어/More Effective C++

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

문제제기:
  goto, cast<형변환>에 의한 사태 악화을 개선하기 위한 문제 제기.

착안점 :
ㅇ C 스타일의 캐스트 문제점
    1) 어떤 타입을 다른 타입으로 아무 생각없이 바꾸어주는 괴물적 존재
    2) 눈으로 찾아내기 힘들다. grep과 같은 도구를 쓰더라도 구분하기 힘들다.
ㅇ C++ 의 네 가지 연산자
    1) static_cast / const_cast / dynamic_cast / reinterpret_cast

해결점 :
 C++에 정의된 cast 타입을 사용하자.
 ㅇ static_cast
 ㅇ const_cast
 ㅇ dynamic_cast
 ㅇ reinterpret_cast

 자세한 내용
 ㅇ http://tingcobell.tistory.com/19 
 ㅇ C++ Language Tutorial : Type Casting http://www.cplusplus.com/doc/tutorial/typecasting.html

요약 : 
 ㅇ static_cast < 타입 >(표현식)
     -  C 스타일의 캐스트와 똑같은 의미와 형변환 능력을 가지고 있고, 기본적인 캐스트 연산자
     -  제약도 그래로
         1) static_cast는 원래 가지고 있는 상수형(constness)을 떼어버리지 못한다.( C 스타일은 가능 )
 ㅇ const_cast
     - 표현식의 상수성이나 휘발성( volatileness)을 없애는데 사용

 

ㅇ dynamic_cast
    - 상속 계층 관계를 가로 지르거나 하향시킨 클래스 타입으로 안전하게 캐스팅 할때 사용
    - 기본 클래스의 객체에 대한 포인터나 참조자의 타입을 파생(derived) 클래스 혹은 형제(sibling) 클래스의 타입으로 변환해준다.
    - 상속 계층 구조를 오갈데만 사용
    - 가상항수가 없는 타입에는 적용할 수 없다.

ㅇ reinterpret_cast
    - 이 연산자 적용 후에 변환 결과는 거의 항상 컴파일러에 따라 다른게 정의.
    - 이 연산자가 쓰인 소스는 직업 이식이 불가능.
    - 가장 흔한 용도는 함수 포인터 타입을 서로 바꾸는 것
< P.s 내용에 대해 잘 모르시는 분들을 위해 링크를 통해 습득하시기 바랍니다.