2012-04-25 14 views
13

Pamiętam kodowanie na platformach, na których wyłączono zarówno RTTI i wyjątki, jak i na innych, które miały oba włączone. Jednak nie pamiętam kodowania na platformie, która umożliwiłaby jedno i wyłączenie drugiego.Czy istnieje związek między RTTI a wyjątkami?

Czy istnieje jakaś zależność między tymi dwoma koncepcjami? Mówiąc inaczej, czy wyjątki potrzebują RTTI do funkcjonowania? Lub przeciwnie?

+0

AFAIR MSVC 5 lub 6 miał domyślnie wyłączone rtti i wyjątki. Może się mylić, to było dawno temu. –

+0

Ten artykuł na temat [ortogonalności RTTI i wyjątków] (http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-ortogonalność /) dodaje do tego tematu. Pokazuje to, że mimo że wyeksponowana funkcjonalność jest niezależna, wyjątki w gcc faktycznie wykorzystują swoją własną wersję "RTTI" do działania. – Chuim

Odpowiedz

10

Nie, Wyjątki nie potrzebują funkcji RTTI ani odwrotnie, obie są osobnymi cechami.

Niektóre implementacje mogą pozwolić na wyłączenie wyjątków (-fnoexceptions w gcc), ale nie znam żadnej implementacji, która potrzebuje RTTI dla wyjątków i na odwrót.

+6

Być może wyjątki nie wymagają jawnych funkcji RTTI w C++, takich jak type_info i dynamic_cast, ale na pewno potrzebują jakiegoś RTTI. Wyrzucony wyjątek musi być w stanie porównać jego typ z obsługą przechwytywania na stosie wyjątków, który obejmuje pewien rodzaj RTTI. –

1

Nie są one zależne od siebie nawzajem, ale oba są ciężkimi cechami, więc jeśli istnieje platforma, która ma złą wydajność, prawdopodobnie zostaną one przecięte razem.

+0

To jest dość przestarzały argument. Wyjątki mają zerowy koszt runtime, dopóki nie zostaną rzucone (co powinno mieć miejsce tylko w wyjątkowych przypadkach). RTTI jest podobnie tylko wzrostem rozmiaru kodu. Jeśli rozmiar kodu jest problemem, dodają one rozmiar, ale nie utrudniają wydajności po prostu przez włączenie. –

Powiązane problemy