Ich verstehe, dass try
und catch()
für die Ausnahmebehandlung verwendet werden, nur für den Fall, dass in bestimmten Fällen ein Fehler oder Absturz im Programm auftritt. Ich verstehe auch, wie sie arbeiten. Warum aber try
und catch()
? Warum nicht einfach eine if()
-Anweisung verwenden, die nach einem bestimmten Fall sucht, und wenn dieser Fall wahr ist, wird cout << //error code
?
Ausnahmebehandlung:
X
- unterstützt die Notation x1 = x2 + x3
- wo könnte ein Fehlercode zurückgegeben werden? try...catch
macht mehr. Es wickelt den Stack ab, der die Destruktoren für alle automatisch zugewiesenen Objekte aufruft, seit die try
eingegeben wurde. Wenn Sie dies auf die von Ihnen vorgeschlagene Art und Weise tun, müssen Sie diese Objekte manuell verfolgen oder es treten Speicherprobleme auf (Lecks, Überschreiben, veraltete Zeiger, doppelte Löschungen).
Der andere Grund ist: Code, den Sie schreiben, könnte auch als Teil eines größeren Projekts von jemand anderem verwendet werden. Und da die Verwendung von integrierten Ausnahmebehandlungsroutinen ein Standard ist, erwarten die Betreuer des größeren Projekts, dass Sie Ihre Ausnahmen ebenfalls behandeln, so dass die Ausnahmebehandlung auf höheren Ebenen ordnungsgemäß erfüllt werden kann - ganz zu schweigen von der Tatsache, dass Standard verwendet wird Ausgabe als eine Fehlerausgabe ist eine zweifelhafte Übung (sie kann zum Beispiel unterdrückt werden oder überhaupt nicht verwendet werden).
UPD: Ich habe deine Frage ein wenig missverstanden. Der Grund, den ich beschrieben habe, rechtfertigt das manuelle Exception-Werfen, aber nicht try...catch
Blöcke.
Ich werde mit einem Zitat von einem meiner Helden, Martin Sústrik von ZeroMQ, antworten, der aus einem Blogeintrag bei stammt Ссылка
Was jedoch großartig ist, um einfache Fehler zu vermeiden, wird zum Albtraum, wenn Sie sicherstellen wollen, dass kein undefiniertes Verhalten passiert. Die Entkopplung zwischen dem Auslösen der Ausnahme und ihrer Handhabung, die es in C ++ so einfach macht, Fehler zu vermeiden, macht es praktisch unmöglich, zu garantieren, dass das Programm niemals unbestimmtes Verhalten ausführt.
Und dann füge ich hinzu, dass ich try / catch für sehr hohe Hebel-Neustart-Ebenen verwende, mehr als alles andere. Hinzufügen, dass meine Meinung wirklich nicht wichtig ist. Ich bin der Überzeugung, dass die Wahl, wie und warum man die Ausnahmebehandlung benutzt, der Wahl sehr ähnlich ist, wenn man Grün mehr als blau mag. Persönliche und keine Eingabe von anderen wird es wahrscheinlich ändern.
Die Frage stellt eine falsche Dichotomie dar . In Java und C # try
- catch
konkurriert mit if
für die Bereinigung bei einem Fehler. In C ++ ist es hauptsächlich RAII-Technik (mit Destruktoren und Ein-Phasen-Konstruktion), die mit if
für die Bereinigung bei einem Fehler konkurriert.
Wenn die Frage gewesen wäre, Ausnahmen im Gegensatz zur Verwendung von if
zu verwenden, wäre dies sinnvoller und relevanter für die normale C ++ Programmierung.
Tags und Links c++ exception-handling exception try-catch