try / throw
-
Was ist eigentlich der Große Unterschied zwischen:
int main() { int a; while(cin >> a) { if(a > 10) throw runtime_error("ERROR 601922_4"); } return 0; }und:
int main() { int a; while(cin >> a) { try { if(a > 10) throw runtime_error("ERROR 601922_4"); } catch(runtime_error err) { cout << "\nTry Again? Enter yes or no" << endl; char c; cin >> c; if(cin && c == 'n') break; } } return 0; }außer dass man beim zweiten vll. seine eigene Fehlermeldung schreiben kann?
Irgendwie check ich den Zusammenhang zwischen try/catch mit throw noch nicht so ganz. Kann mir dass einer in der Kurzform nochmal erklären? (Forum Artikel is mir viel zu kompliziert und komplex)MfG
Stromberg
-
Der Unterschied ist, das obere programm würde sich mit ner unhandled Exception in Luft auflösen, das untere würde trotz Fehler weiterlaufen.
Die Blöcke sind ganz einfach zu verstehen, im try Block versuchst du etwas, zB Funktionsaufrufe, Berechnungen usw. Wenn dort eine Exception mit throw geworfen wird dann durchsucht er die catch Blöcke (ja Blöcke es kann mehr als ein Catch drunter sein) nach einem Catch das eine passende Exception erwartet und führt den Code darin aus. Du hast damit die Chance es anders zu Probieren.
Übrigends man kann mit throw nicht nur die Exceptions aus der std werfen es steht dir frei eigene Exception Klassen zu schreiben die von dir deffinierte Inhalte haben.
Die Artikel dazu soltest du trotzdem mal lesen. Hier schwirt auch noch irgendwo ein Thread über Fehlerbehandlung in Engines herum mit einer Diskussion über Exceptions.
-
Eingabefehler des Benutzers sind keine Ausnahme!
-
Im C++ Primer steht:
[...] Ausnahmen sind Laufzeitanomalien, wenn z.B. der Speicher erschöpft ist oder unerwartete Eingaben erfolgen. [...]
MfG
Stromberg
-
Naja ich würde sagen es komt drauf an. Wenn ich eine Eingabe direkt vor Ort prüfen kann brauche ich keine Exception weil ich ja sowieso ne if abfrage habe und in der kann ich alles weitere machen. Wenn die Eingabe tiefer ins Programm wandert und erst da geprüft wird dann braucht man schon Exceptions denn wie will man sonst weiter oben bescheid geben das da was faul war.
-
Xebov schrieb:
Naja ich würde sagen es komt drauf an. Wenn ich eine Eingabe direkt vor Ort prüfen kann brauche ich keine Exception weil ich ja sowieso ne if abfrage habe und in der kann ich alles weitere machen. Wenn die Eingabe tiefer ins Programm wandert und erst da geprüft wird dann braucht man schon Exceptions denn wie will man sonst weiter oben bescheid geben das da was faul war.
Exceptions benutzt man dann, wenn man den Fehler nicht lokal beheben kann und ihn an eine höhere Schicht delegieren muss zur (korrekten) Behandlung.