2014-01-21 3 views
-1

dynamic_cast<>() (업 캐스팅이라고도 함)은 static_cast<>() (다운 캐스트라고도 함)이 유형 런타임을 변환하지 않는 이유는 무엇입니까? 둘 다 클래스 계층을 통해 진행하는 데 사용됩니다. dynamic_cast<>()이 런타임 유형을 형 변환해야하는 이유는 무엇일까?C++ 정적 및 동적 유형 캐스팅

+0

당신은 이것에 대해 잘못된 각도를 가지고 있습니다 : 그들이 그렇게하도록 설계 되었기 때문에 그들은 그렇게 행동합니다. – juanchopanza

+0

두 개의 __cast 용어를 바꾸 었다고 생각하지만 'static_cast'는 상영보다 더 많이 사용됩니다. 그래, 그들은 전환 될 수 있지만, 나는'dynamic_cast'가 상영을하는 것을 본 적이 없다. 다운 캐스팅에 사용되는'static_cast '는 일반적으로 CRTP와 같은 것들에서 더 많이 발견됩니다. – chris

+4

연구 노력이 전혀 필요하지 않습니다. – Shoe

답변

3

둘 다 대개 다운 캐스팅 (기본 클래스에서 파생 클래스로)에 사용됩니다. 상영은 항상 안전하므로 명시 적 캐스트가 필요하지 않습니다. 의견에서 언급 한 바와 같이, 상영에 사용하는 경우 두 가지 모두 동등합니다 (암시 적 변환과 동일).

다운 캐스팅의 경우 static_cast은 런타임 검사를 수행하지 않고 변환이 유효하지 않은 경우 정의되지 않은 동작을하기 때문에 더 빠르지 만 위험 할 수 있습니다. dynamic_cast은 다형 유형에서만 사용할 수있는 런타임 유형 정보가 필요하지만 비 다형 유형에서도 작동합니다.

입문서에 자세히 설명되어 있습니다.

+0

상영을위한 암시 적 변환이 있지만 명시 적 변환을 원하는 경우가 있습니다. 이런 경우,'dynamic_cast'와'static_cast'는 동의어입니다. –