2012-04-25 22 views
13

Recuerdo la codificación en plataformas que tenían RTTI y excepciones desactivadas, y en otras que tenían ambas habilitadas. Sin embargo, no puedo recordar la codificación en una plataforma que permitiría uno y desactivaría el otro.¿Existe una relación entre RTTI y excepciones?

¿Hay algún tipo de dependencia entre los dos conceptos? Dicho de otra manera, ¿las excepciones necesitan RTTI para funcionar? O lo contrario?

+0

AFAIR MSVC 5 o 6 tenían rtti apagado y excepciones activadas por defecto. Podría estar equivocado, fue hace mucho tiempo. –

+0

Este artículo sobre la [ortogonalidad de RTTI y excepciones] (http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-ortogonality /) agrega a este tema. Muestra que, aunque la funcionalidad expuesta es independiente, las excepciones en gcc realmente usan su propia versión de "RTTI" para funcionar. – Chuim

Respuesta

10

No, las excepciones no necesitan funcionalidad RTTI ni viceversa, ambas son funciones separadas.

Algunas de las implementaciones pueden permitirle desactivar excepciones (-fnoexcepciones en gcc) pero no conozco ninguna implementación que necesite RTTI para excepciones o viceversa.

+6

Quizás las excepciones no necesiten las características explícitas de RTTI de C++ como type_info y dynamic_cast, pero seguramente necesitan algún tipo de RTTI. La excepción lanzada tiene que ser capaz de comparar su tipo con los manejadores de captura en la pila de excepción, que implica algún tipo de RTTI. –

1

No son dependientes entre sí, pero ambas son pesadas, de modo que si hay una plataforma que tiene un mal rendimiento, probablemente ambas se corten juntas.

+0

Este es un argumento bastante desactualizado. Las excepciones tienen un costo de ejecución cero hasta que se lanzan (lo que solo debería ocurrir en casos excepcionales). RTTI es similarmente solo un aumento de tamaño de código. Si el tamaño del código es un problema, ambos agregan tamaño, pero no obstaculizan el rendimiento simplemente al habilitarse. –

Cuestiones relacionadas