Post

Q.캐스팅

Q. 캐스팅?
A. 스태틱 캐스트, 다이나믹 캐스트, 콘스트 캐스트, 리인터프리트 캐스트

Q. static_cast가 dynamic_cast보다 빠른 이유?
A. static_cast는 컴파일 타임에 검증이 끝나서 추가적인 런타임 비용이 없기 때문에 상대적으로 빠릅니다. (dynamic_cast는 런타임 검사가 필요해 상대적으로 느림)

Q. const_cast 언제 사용? 왜 사용하는가?
캐시 업데이트?

Q. 애니멀 a 뉴 도그, 애니멀 b 뉴 캣을 했다, a를 b로 스태틱 캐스팅 하면 동작이 이루어지는가?
A.. 캐스팅 동작을 이루어집니다. 하지만 문제가 있습니다. 다른 자식간의 형 병환이기 때문에 전혀 없는 멤버변수나 멤버함수로 인해 문제가 생길 수 있습니다.

Q. dynamic_cast가 상대적으로 안전한 이유?
A. dynamic_cast는 RTTI를 이용해 실제 객체 타입을 런타임에 검증한 뒤 변환을 수행하고, 실패 시 널 포인터를 반환하기 때문에 잘못된 캐스팅으로 인한 정의되지 않은 동작을 방지할 수 있어 상대적으로 안전합니다.

(그대신 런타임 비용이 듭니다.(RTTI 탐색, vtable접근))

Q. RTTI?
A. 런타임에 객체의 타입 정보를 확인할 수 있게 해주는 기능입니다. typeid, type_info, dynamic_cast가 있습니다.

Q. RTTI를 끄면 어떻게 되는가?

Q. typeid?
A. typeid는 C++에서 객체나 타입의 실제 타입 정보를얻기 위해 사용되는 연산자입니다. 실행 시점에 객체의 타입을 식별할 수 있게 해줍니다.
typeid를 사용하면 std::type_info객체를 반환하며, 이를 통해 타입의 이름을 가져올 수 있습니다. 예를 들어, 다형성을 사용할 때 객체의 실제 타입을 확인할 때 유용합니다.

Q. dynamic_cast에서 포인터와 레퍼런스의 차이?
A. 포인터 변환 실패 시: nullptr 반환 → 안전하게 검사 가능
레퍼런스 변환 실패 시: std::bad_cast 예외 발생 → 반드시 예외 처리 필요

This post is licensed under CC BY 4.0 by the author.