Las excepciones son útiles en una variedad de circunstancias.
Primero, hay algunas funciones en las que el costo de calcular la condición previa es tan alto que es mejor simplemente hacer el cálculo y abortar con una excepción si se encuentra que la condición previa no se cumple. Por ejemplo, no puede invertir una matriz singular, sin embargo, para calcular si es singular, calcula el determinante que es muy costoso: puede que tenga que hacerse dentro de la función de todos modos, así que "intente" invertir la matriz e informe un error si no puede lanzar una excepción. Esta es básicamente una excepción como uso de condiciones previas negativas .
Luego, hay otros casos en los que su código ya es complejo y es difícil pasar información de error por la cadena de llamadas. Esto se debe en parte a que C y C ++ tienen modelos de estructura de datos defectuosos: hay otras formas mejores, pero C ++ no las admite (como el uso de mónadas en Haskell). Este uso es básicamente que no me molestaría en hacerlo bien, así que lanzaré una excepción : no es la forma correcta, pero es práctica.
Luego está el uso principal de las excepciones: informar cuando las condiciones previas externas o invariantes, como recursos suficientes como memoria o espacio en disco, no están disponibles. En este caso, normalmente terminará el programa, o una subsección importante del mismo, y la excepción es una buena forma de transmitir información sobre el problema. Las Excepciones de C ++ fueron diseñadas para informar errores que impiden que el programa continúe .
Se sabe que el modelo de manejo de excepciones utilizado en la mayoría de los lenguajes modernos, incluido C ++, no funciona. Es demasiado poderoso. Los teóricos ahora han desarrollado mejores modelos que el modelo completamente abierto de "arrojar cualquier cosa" y "tal vez y tal vez no atraparlo". Además, el uso de información de tipo para clasificar excepciones no fue una muy buena idea.
Entonces, lo mejor que puede hacer es lanzar excepciones con moderación, cuando hay un error real y cuando no hay otra forma de lidiar con él y detectar excepciones lo más cerca posible del punto de lanzamiento .