static_cast, reinterpret_cast, dynamic_cast에 관한 내용 알아보기
ex00
static_cast를 이용하여 파라미터로 입력받은 값을 형변환
컴파일 시에 캐스팅을 진행한다.
- char
- int
- double
- float
ex01
허용하지 않는 타입에 대한 캐스팅을 강제로 진행하는 reinterpret_cast를 사용
이걸 쓰고 나서 다시 원래의 타입으로 돌아갔을 때, 정보가 모두 온전히 보전되는지를 파악함.
- 포인터와 정수 간의 변환
- 객체의 이진 표현
여기서는 구조체의 주소(포인터)를 포인터 저장용 정수(uintptr_t)로 바꾸고 있음.
ex02
다음 구조를 가진 빈 클래스들을 만든다 : Base → A, B, C
이후 generate(), identify()를 만들어 준다.
- generate() : 랜덤하게 A, B, C 타입 중 하나의 타입을 골라 객체를 만든다.
- identify() : 해당 객체가 어떤 타입인지 파악한다.
- identify()에서 dynamic_cast를 사용한다.
- static_cast는 다운캐스팅에서 안전하지 않을 수 있기 때문.
- static_cast : 컴파일 타임에 단순히 타입을 변환, 실제로 해당 타입을 가리키고 있는지 프로그램이 돌아가는 동안 확인할 수 없음.
- dynamic_cast : 런타임에 객체의 실제 타입을 확인. 다운캐스팅이 유효한지 확인 가능.