열렬히.뛰기

Cpp module 06

école 42 > Cpp part.1 > 42 : Cpp 모듈 > Cpp module 06

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 : 런타임에 객체의 실제 타입을 확인. 다운캐스팅이 유효한지 확인 가능.