2012-04-25 6 views
13

RTTI와 예외를 모두 사용하지 않도록 설정 한 플랫폼에서 코드를 작성한 것을 기억합니다. 그러나 하나를 활성화하고 다른 하나는 비활성화하는 플랫폼에서 코딩을 기억할 수 없습니다.RTTI와 예외 사이에 관계가 있습니까?

두 개념간에 어떤 종류의 종속성이 있습니까? 다르게 말하면 예외가 작동하려면 RTTI가 필요합니까? 반대로?

+0

AFAIR MSVC 5 또는 6에는 기본적으로 rtti off 및 exceptions이 있습니다. 잘못되었을 수도 있습니다. 오래 전이었습니다. –

+0

[RTTI 및 예외의 직교성] (http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-orthogonality)에 대한이 기사 /)이이 주제에 추가됩니다. 노출 된 기능이 독립적이라하더라도 gcc의 예외는 실제로 "RTTI"의 자체 버전을 사용하여 작업한다는 것을 보여줍니다. – Chuim

답변

10

아니요, 예외는 RTTI 기능을 필요로하지 않으며 반대의 경우도 모두 별도의 기능입니다.

일부 구현에서는 예외 (gcc에서 -fnoexceptions)를 사용하지 않도록 설정할 수 있지만 예외에 대해서는 RTTI가 필요한 구현을 알지 못합니다.

+6

아마도 예외는 type_info 및 dynamic_cast와 같은 명시적인 C++ RTTI 기능을 필요로하지 않지만 확실한 종류의 RTTI가 필요합니다. Throw 된 예외는 어떤 종류의 RTTI가 관련된 예외 스택의 catch 핸들러와 해당 유형을 비교할 수 있어야합니다. –

1

그들은 서로 의존적이지 않지만 두 가지 모두 무거운 기능입니다. 따라서 성능이 나쁜 플랫폼이있는 경우 아마 둘 다 함께 절단됩니다.

+0

이것은 꽤 오래된 구절입니다. 예외는 던져 질 때까지 런타임 비용이 없습니다 (예외적 인 경우에만 발생해야 함). RTTI는 마찬가지로 코드 크기가 증가합니다. 코드 크기가 문제가되면 둘 다 크기를 추가하지만 단순히 사용 설정 만하면 성능을 저해하지는 않습니다. –