문제

다음 질문에 대한 답변은 권장되는 사용법을 설명합니다. static_cast, dynamic_cast, 그리고 reinterpret_cast C ++에서 :

static_cast, dynamic_cast, const_cast 및 reinterpret_cast는 언제 사용해야합니까?

이러한 종류의 캐스트의 오용을 감지하는 데 사용할 수있는 도구를 알고 있습니까? PC-Lint 또는 Coverity 정적 분석과 같은 정적 분석 도구가이를 수행합니까?

이 질문을 제기 한 특별한 경우는 부적절한 사용이었습니다. static_cast 컴파일러가 경고하지 않는 포인터를 다운 캐스트합니다. 도구를 사용 하여이 사례를 감지하고 싶습니다. 개발자 가이 실수를하지 않을 것이라고 가정하지 않습니다.

도움이 되었습니까?

해결책

컴파일 타임에 포인터가 어떤 유형을 가리키는 지 알 수있는 신뢰할 수있는 방법이 없다는 것을 감안할 때, 이것은 컴파일 시간에 잡기가 매우 어려운 문제입니다.

가장 간단한 방법은 런타임에 캐치를 수행하는 것입니다. 거시 "Safe_cast"를 사용하여 Debug의 Assert와 릴리스의 static_cast와 함께 Dynamic_cast로 컴파일됩니다.

이제 디버깅 중에 캐스트가 부적절한 경우 동적 캐스트가 Null을 반환하고 주장합니다. 릴리스 중에 오버 헤드도 없습니다.

다른 팁

Visual Studio에는이 중 일부에 대한 경고가 있습니다. 예를 들어 C4946. 그들은 대부분 기본적으로 꺼져 있습니다.

http://msdn.microsoft.com/en-us/library/23k5d385.aspx

Boost는 polymorphic_pointer_downcast () 및 polymorphic_downcast () 함수를 제공합니다.이 기능은 static_cast와 같이 작동하지만 동등한 Dynamic_cast가 실패하면 (일반적으로 디버그 빌드에서만)를 주장합니다.

보다 http://www.boost.org/doc/libs/1_61_0/libs/conversion/cast.htm 자세한 내용은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top