2021년 1월 12일 화요일

C++ Type Casting 연산

C언어의 형변환(Type Casting)의 경우, 타입 체크를하지 않아서 버그를 유발할 수 있어
컴파일 단계에서 Warning이 뜨거나 에러가 발생하는 경우가 많고, 
실제로 원치 않는 데이터 유실이 발생할 수도 있다.

C++에서는 4가지 Type Cast Operation을 제공한다.

  • static_cast
    • 컴파일 단계에서 타입체크를 수행한다.
    • child class의 포인터를 parent class로 캐스팅한다.
    • parent class의 포인터를 child class로 캐스팅한다. (child class만의 variable/method 사용 불가)
    • 기본적 타입들에 대한 변환에 사용
    • runtime check를 하지 않는다.

  • const_cast
    • 컴파일 단계에서 타입체크를 수행한다.
    • 타입에 const, volatile 키워드를 붙이거나 땔때 사용한다.

  • dynamic_cast
    • runtime 시에 동작한다.
    • 객체를 상속 관계 속에서 캐스팅 하는 등 객체의 포인터에만 사용한다.
    • virtual method를 가지는 클래스에서 사용하며, 그렇지 않은 경우는 static_cast를 사용하면 된다.
    • 만약 주어진 포인터가 캐스팅하기에 적절하지 않으면 NULL을 리턴한다.
    • dynamic_cast의 종류
      • upcast
        child class를 parent class로 캐스팅
      • donwcast
        parent class를 child class로 캐스팅
      • crosscast
        다중 상속 시 사용

  • reinterpret_cast
    • 포인터를 어떤 타입으로든 캐스팅할 수 있다.
    • 강력하지만 위험, C언어의 형변환과 가장 유사해 보인다.

댓글 없음:

스프린트 정리

스프린트 :  스프린트는 프로토타입을 제작하고 고객과 함께 아이디어를 테스트하여 중요한 문제들에 대한 답을 찾는 독특한 5일 짜리 과정이다. 스트린트는 업무 전략, 혁신 행동과학, 디자인 그 외 여러 분야의 최고 히트작을 어떤 팀에서라도 사용할 수 있...