캐스팅 연산자
코딩을하다가 실수형변수를 정수형으로 변환하기 위하여 (int)라는 것을 한적이 있는가? 이와 같은걸 캐스팅이라 한다. 사실 (int)와 같은건 좀 위험하다. 강제로 형태를 변환시키니까… 하지만 캐스팅이 필요한 경우가 있다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇가지 등장한 캐스팅연산자들이 있다.
static_casst<>
- 기본 데이터 타입간의 캐스팅에 주로 이용
- 형변환에 대한 타입체크를 컴파일 타임에 정적으로 수행
- 상속관계에 있는 클래스 간의 계층 변화
- 런타임 검사 이용X
- RTTI 꺼져있어도 됨
- 다중상속에서는 기본 클래스간의 타입 변화 불가
- 서로 다른타입의 포인터간 변화 불가능
dynamic_cast<>
- 상속관계의 클래스간에 포인터나 참조자의 타입을 다운캐스팅하거나 기본클래스간의 안전한 캐스팅에 이용
- 캐스팅 대상이 하나 이상의 가상함수를 가지고 있어야 한다
- 캐스팅하는 대상은 반드시 클래스의 포인터형이거나 참조형이여야 함
- 런타임때 타입 검사를 해야함. RTTI 옵션이 켜져 있어야 함
- 캐스팅 성공여부를 리턴해줌 => 안전한 캐스팅
const_cast<>
- 포인터나 참조자의 상수성을 제거
- 상수성 제거용으로만 사용될수 있음
reinterpret_cast<>
- 강제형 변환
- 상관관계, 상속관계에 없이 서로간의 타입 캐스팅을 시킴
- 상수성 제거는 할수 없음
- 사실상 C타입 캐스팅 다음으로 위험한 캐스팅 연산자
이처럼 4가지의 캐스팅 연산자가 등장하면서 캐스팅연산을 좀더 안전하게(?) 할 수 있게 되었다.