Ausnahmen sind unter verschiedenen Umständen nützlich.
Erstens gibt es einige Funktionen, bei denen die Kosten für die Berechnung der Vorbedingung so hoch sind, dass es besser ist, nur die Berechnung durchzuführen und mit einer Ausnahme abzubrechen, wenn festgestellt wird, dass die Vorbedingung nicht erfüllt ist. Zum Beispiel können Sie eine singuläre Matrix nicht invertieren. Um jedoch zu berechnen, ob sie singulär ist, berechnen Sie die Determinante, die sehr teuer ist: Möglicherweise muss sie ohnehin innerhalb der Funktion durchgeführt werden. Versuchen Sie also einfach, die Matrix und den Bericht zu invertieren Ein Fehler, wenn Sie keine Ausnahme auslösen können. Dies ist grundsätzlich eine Ausnahme als negative Vorbedingung .
Dann gibt es andere Fälle, in denen Ihr Code bereits komplex ist und es schwierig ist, Fehlerinformationen über die Aufrufkette zu übertragen. Dies liegt zum Teil daran, dass C und C ++ fehlerhafte Datenstrukturmodelle haben: Es gibt andere, bessere Möglichkeiten, aber C ++ unterstützt sie nicht (z. B. die Verwendung von Monaden in Haskell). Diese Verwendung ist im Grunde genommen nicht die Mühe, es richtig zu machen, also werde ich eine Ausnahme werfen : Es ist nicht der richtige Weg, aber es ist praktisch.
Dann gibt es die Hauptverwendung von Ausnahmen: um zu melden, wenn externe Voraussetzungen oder Invarianten, wie z. B. ausreichende Ressourcen wie Speicher oder Speicherplatz, nicht verfügbar sind. In diesem Fall beenden Sie normalerweise das Programm oder einen wichtigen Unterabschnitt davon. Die Ausnahme ist eine gute Möglichkeit, Informationen über das Problem zu übertragen. C ++ - Ausnahmen wurden entwickelt, um Fehler zu melden, die verhindern, dass das Programm fortgesetzt wird .
Es ist bekannt , dass das in den meisten modernen Sprachen, einschließlich C ++, verwendete Ausnahmebehandlungsmodell fehlerhaft ist . Es ist viel zu mächtig. Theoretiker haben jetzt bessere Modelle entwickelt als das völlig offene Modell "Alles werfen" und "Vielleicht und vielleicht nicht fangen". Darüber hinaus war es keine gute Idee, Typinformationen zur Klassifizierung von Ausnahmen zu verwenden.
Das Beste, was Sie tun können, ist , Ausnahmen sparsam zu werfen, wenn ein tatsächlicher Fehler vorliegt und wenn es keine andere Möglichkeit gibt, damit umzugehen und Ausnahmen so nahe wie möglich am Wurfpunkt zu fangen .