2011-05-16 9 views
6

Esto es algo quisquilloso y es probable que sea solo mi agotamiento de TOC, pero me preguntaba por qué la jerarquía de clases de excepción estándar está configurada tal como está.Razones para la estructura de la jerarquía de excepción estándar

exception 
    bad_alloc 
    bad_cast 
    bad_typeid 
    bad_exception 
    ios_base::failure 
    runtime_error 
    subclasses... 
    logic_error 
    subclasses... 

Podrían no todo el bad_ * excepciones acaba de ser subclases de algo así como lang_support_error? Y ios_base :: failure parece completamente fuera de lugar.

¿Existen razones históricas o técnicas por las que la jerarquía terminó así?

+3

sólo sirve para demostrar lo difícil (y esencialmente sin sentido) que es diseñar jerarquías de excepción :-) –

Respuesta

3

Si no recuerdo mal, la lógica era:

  • logic_error sería el equivalente de un assert, pero con un comportamiento menos drástica
  • runtime_error sería la base de todos los demás

Sin embargo, como habrás notado, no funciona del todo, incluso en la biblioteca estándar en sí misma.

El problema principal que supongo es la subjetividad: ¿es std::out_of_range a logic_error o runtime_error?

Es subjetivo ...

Cuestiones relacionadas