Les Exceptions sont utiles dans une variété de circonstances.
Tout d'abord, il y a certaines fonctions où le coût de calcul de la pré-condition est si élevé qu'il est mieux de faire le calcul et abandonner avec une exception si elle est trouvée, la pré-condition n'est pas remplie. Par exemple, vous ne pouvez pas inverser une matrice singulière, cependant pour calculer si il est singulier vous calculer le déterminant qui est très cher: il peut être fait à l'intérieur de la fonction, de toute façon, si juste "essayer" à l'inversion de la matrice et signale une erreur si vous ne pouvez pas par la levée d'une exception. C'est avant tout une exception, comme le négatif de la pré-condition d'utilisation.
Puis il y a d'autres cas où votre code est déjà complexe et en passant les informations d'erreur jusqu'à l'appel de la chaîne est difficile. C'est en partie parce que le C et le C++ ont brisé la structure de données modèles: il y en a d'autres, de meilleures façons, mais le C++ ne les supporte pas (comme l'utilisation de monades en Haskell). Cette utilisation est, fondamentalement, je ne pouvais pas être pris la peine de le faire donc je vais jeter une exception: ce n'est pas de la bonne façon, mais c'est pratique.
Ensuite, il est la principale utilisation des exceptions: le signaler lors de la externe pré-conditions ou les invariants, tels que suffisamment de ressources comme la mémoire ou l'espace disque, ne sont pas disponibles. Dans ce cas, vous aurez généralement à la fin du programme, ou d'un paragraphe, et l'exception est un bon moyen de transmission d'informations sur le problème. Les Exceptions C++ ont été conçus pour signaler des erreurs qui empêchent le programme continue.
La gestion des exceptions modèle utilisé dans la plupart des langues modernes, notamment en C++ est connu pour être brisées. C'est largement trop puissant. Les théoriciens ont élaboré des meilleurs modèles que l'complètement ouvert "jeter quoi que ce soit" et "peut-être et peut-être de ne pas l'attraper" modèle. En outre, à l'aide des informations de type de classer les exceptions n'était pas une très bonne idée.
Donc, la meilleure chose que vous pouvez faire est de lancer des exceptions avec parcimonie, quand il y a une erreur réelle, et quand il n'y a pas d'autre moyen de traiter avec elle, et attraper les exceptions à proximité de les jeter possible.