프로그래밍 /C++
CAST 종류 + RTTI
kyoun
2019. 4. 30. 17:15
STATIC CAST
- 가장 기본적이고, 일반적인 캐스트 연산자
- 형변환에 대한 타입체크를 런타임에 하지 않고, 컴파일타임에 정적으로 수행한다.
dynamic_cast
- 형변환 타입체크를 런타임 중 RTTI (중요함)을 한다 - > 그 만큼 비용이 듬
- 상속 클래스 간의 캐스팅 유용
- 실행 중에 캐스트의 대상이 되는 데이터를 능동적으로 판단하여 실행 코드가 캐스트를 수행합니다.
- 변환이 잘못된 경우'에 'NULL'을 던진다
> RTTI
* 실행시간 타입정보 (Run Time Type Information)
* 실행 시간에 객체들의 정보(타입)를 얻는 표준화된 방법을 제공
* 런타임에 타입의 정보를 가지고 오류를 검사하는 목적으로 사용
* RTTI는 가상 함수들을 가지고 있는 클래스 계층에 대해서만 사용할 수 있다.
* 이유는 그들이 파생 객체들의 주소를 기초 클래스 포인터들에 대입해야 하는 유일한 클래스 계층이기 때문이다.
* 실행 시간에 객체들의 정보를 얻고자할 때 사용됩니다.
* 런타임에 타입을 검사한다.
> RTTI의 구성요소
* type_info (구조체) : 실행 시간에 확인하고자 하는 타입에 대한 정보 저장 구조체.
* typeid (연산자) : 객체 타입을 식별하고 반환하는 연산자
* dynamic_cast (연산자) : 실행시간 중 객체를 형변환하는 연산자.
const_cast
- 상수포인터를 비상수 지시포인터로 바꾸고 싶을떄 사용한다. (const 제거)
- 캐스팅의 실패는 NULL(포인터)이거나 예외(참조자)를 보고 판별할 수 있다.
- 상속관계에서만 사용가능함, 다형성을 띄지 않은 객체간 변환은 불가능하며, 시도시 컴파일 에러
reinterpret_cast
- 임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자