Je voudrais revenir sur un point : le fait de réserver les exceptions à de erreurs exceptionnelles est débattable. De fait, c'est le seul moyen qu'on a de renvoyer une erreur dans un constructeur (quel que soit le degré d'exceptionnalité de l'erreur en question). Ensuite, le stack unwind implicite est du même ordre (en terme de pénalité sur les performances) que le stack unwind explicite lié au test d'un code d'erreur. Un des problèmes liés aux exceptions est qu'il fragilise globalement le code si on y prends pas garde, et que leur utilisation casse le flux de contrôle du programme (pouvant rendre celui-ci plus complexe à appréhender lorsqu'on débogue un problème).
Ceci dit, ces problèmes sont compensés par le fait que leur seule présence (et utilisation) permet d'affiner le sens du code.
Un exemple simple : si une fonction n'a pas besoin de renvoyer quoi que ce soit, alors sémantiquement il est plus juste de la définir avec un type de retour void. Si cette fonction peut traiter des cas d'erreur, alors l'utilisation d'exception permet de préserver sa sémantique (qui n'est plus préservée si on renvoie un code d'erreur).
Partager