Warum kommt der C ++ ein neuer Fehler Mechanismus?

C ++ verwendet den Ausnahmemechanismus auf Fehler. Was # 8242-s falsch mit Fehler zurückkehrt wie Fortran machen verwendet? Faktorielle kann nicht negativ sein, so könnten Sie etwas gesagt haben wie # 147-Okay, wenn Fakultät() erkennt einen Fehler, es eine negative Zahl zurückgibt. Der Ist-Wert zeigt die Quelle des Problems. # 148- Was # 8242-s falsch? Das # 8242-s, wie es war für Alter getan. (# 147-Wenn es gut genug für Opa # 133- # 148-)

Leider ergeben sich mehrere Probleme. Erstens: Obwohl es # 8242-s wahr, dass das Ergebnis eines faktoriellen # 8242-t negativ sein kann, andere Funktionen aren # 8242-t so viel Glück. Zum Beispiel können Sie # 8242-t das Protokoll einer negativen Zahl entweder, aber Logarithmen kann entweder negativ oder positiv sein. Es gibt keinen Wert, der eine logarithmische Funktion nicht zurückgeben kann.

Zweitens gibt # 8242-s nur so viele Informationen, die Sie in einer ganzen Zahl speichern kann. Vielleicht können Sie -1 haben für # 147-Argument ist negativ # 148- und -2 für # 147-Argument ist zu groß. # 148- Aber, wenn das Argument zu groß ist, Sie wissen wollen, was das Argument, da diese Informationen könnten Sie das Problem debuggen helfen. Es # 8242-s keinen Platz für diese Art von Informationen zu speichern.

Drittens ist die Verarbeitung von Fehler kehrt optional. Angenommen, jemand schreibt Fakultät() so dass er pflichtschuldigst das Argument überprüft und gibt eine negative Zahl, wenn das Argument außerhalb des Bereichs liegt. Wenn eine Funktion, die Anrufe Fakultät() doesn # 8242-t die Fehler Rückkehr zu überprüfen, ein Fehlerwert doesn # 8242-t tun etwas Gutes zurück.

Sicher, können Sie alle Arten von drohenden Gefahren zu machen, wie zum Beispiel # 147-Sie werden Ihre Fehler erneut überprüfen oder auch, # 148- und der Programmierer kann die besten Absichten haben, aber Sie alle wissen, dass die Menschen faul und zurück zu ihren alten, nicht-Fehlerprüfung Wege.

Selbst wenn Sie die Fehler Rückkehr tun check von Fakultät() oder jede andere Funktion, was kann mit dem Fehler der Funktion tun? Es kann wohl nichts mehr als eine Fehlermeldung ausgegeben eigene tun und einen anderen Fehlermeldung an den Aufrufer zurückgeben, was wahrscheinlich das gleiche tut. Schon bald gibt es mehr Fehlererkennungscode als "echte" Code und es ist alles miteinander vermischt.

Der Ausnahmemechanismus löst diese Probleme, indem die Fehlerpfad von dem normalen Codepfad zu entfernen. Darüber hinaus machen es Ausnahmen Fehlerbehandlung obligatorisch. Wenn Ihre Funktion # 8242-t behandeln die ausgelöste Ausnahme doesn, geht die Steuerung die Kette der aufgerufenen Funktionen bis C ++ eine Funktion findet den Fehler zu behandeln.

Dies gibt Ihnen auch die Flexibilität, um Fehler zu ignorieren, die Sie # 8242-t alles tun, um trotzdem. Nur die Funktionen, die das Problem tatsächlich umgehen können müssen die Ausnahme zu fangen.

Menü