STATIC CAST

  • 가장 기본적이고, 일반적인 캐스트 연산자
  • 형변환에 대한 타입체크를 런타임에 하지 않고, 컴파일타임에 정적으로 수행한다.

dynamic_cast

  • 형변환 타입체크를 런타임 중 RTTI (중요함)을 한다 - > 그 만큼 비용이 듬
  • 상속 클래스 간의 캐스팅 유용
  • 실행 중에 캐스트의 대상이 되는 데이터를 능동적으로 판단하여 실행 코드가 캐스트를 수행합니다. 
  • 변환이 잘못된 경우'에 'NULL'을 던진다

 


> RTTI  

* 실행시간 타입정보 (Run Time Type Information)
* 실행 시간에 객체들의 정보(타입)를 얻는 표준화된 방법을 제공
* 런타임에 타입의 정보를 가지고 오류를 검사하는 목적으로 사용
* RTTI는 가상 함수들을 가지고 있는 클래스 계층에 대해서만 사용할 수 있다. 
* 이유는 그들이 파생 객체들의 주소를 기초 클래스 포인터들에 대입해야 하는 유일한 클래스 계층이기 때문이다.
* 실행 시간에 객체들의 정보를 얻고자할 때 사용됩니다.
* 런타임에 타입을 검사한다.

> RTTI의 구성요소  
  
* type_info (구조체)      : 실행 시간에 확인하고자 하는 타입에 대한 정보 저장 구조체.
* typeid (연산자)          : 객체 타입을 식별하고 반환하는 연산자
* dynamic_cast (연산자) : 실행시간 중 객체를 형변환하는 연산자. 


const_cast

  • 상수포인터를 비상수 지시포인터로 바꾸고 싶을떄 사용한다. (const 제거)
  • 캐스팅의 실패는 NULL(포인터)이거나 예외(참조자)를 보고 판별할 수 있다.
  • 상속관계에서만 사용가능함, 다형성을 띄지 않은 객체간 변환은 불가능하며, 시도시 컴파일 에러

reinterpret_cast

  • 임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자

'프로그래밍 > C++' 카테고리의 다른 글

절차지향 + 객체지향  (0) 2019.05.01
페이지 폴트 + 가상메모리 시스템  (0) 2019.05.01
virtual 순수가상함수 + 가상함수테이블  (0) 2019.04.30
람다식  (0) 2019.04.29
함수 객체  (0) 2019.04.29

+ Recent posts