Herausfinden welche Exceptions alle geworfen werden können
-
Hi,
ich bin noch recht neu in Cpp und möchte von daher in meinen Programmen möglichst viele Fehlerabfragen einbauen. Nun ist meine Frage, woher weiß ich welche Exceptions ich zum Beispiel bei string operationen abfangen muss.
Bsp:
try { std::string test( "blabla" ); // haufenweise Methoden von test } catch( /* welche Exceptions sind alles möglich */ ) { }Das gleiche gilt für Datei Zugriffe via std::fstream.
Ich habe gesucht, aber leider keine Liste gefunden.
-
Hallo
Da eigentlich nur Ableitungen von std::exception geworfen werden sollen (und die Standard-Library das auch so macht) genügt das
try { std::string test( "blabla" ); // haufenweise Methoden von test } catch( std::exception& ex ) { std::cout << ex.what() << std::endl; }bis bald
akari
-
Aber, ich möchte ind der Regel ja nicht nur wissen was passiert ist, sondern auch sofort reagieren können. Einen Index_Overflow behandele ich ja anders als ein Memory Fehler.
-
Und? Wo ist das Problem?
try { std::string test( "blabla" ); // haufenweise Methoden von test } catch( std::out_of_range& ex ) { std::cout << ex.what() << std::endl; } catch( std::bad_alloc& ex ) { std::cout << ex.what() << std::endl; } catch( std::exception& ex ) { std::cout << ex.what() << std::endl; }
-
Artchi schrieb:
Und? Wo ist das Problem?
...Ich denke mal, sein "Problem" besteht darin, dass er nicht um jedes Statement einen try/catch-Block für alle exceptions aus <stdexcep> basteln will.
Ich bin mir nicht sicher, ob der Standard sich dazu äußert, welche Funktionen welche exceptions werfen und welche nicht.
Gruß,
Simon2.
-
Bei vielen Funktionen steht die möglich Exception im Standard. Manchmal, wie im Fall basic_string steht einfach nur da welche exceptions von Funktionen dieser Klasse im Allgemeinen geworfen werden können.
Bsp. aus 21.3 4The functions described in this clause can report two kinds of errors, each associated with a distinct exception:
— a length error is associated with exceptions of type length_error (19.1.4);
— an out-of-range error is associated with exceptions of type out_of_range (19.1.5).Man muss sich da dann halt durchwühlen.

-
In C++ Exceptions nicht so verwenden wie in Java. Es gibt keine checked Exc. und das macht alles zunichte.
-
ich denke auch, dass sein Problem eher ist, dass er nicht weiß, welche Exceptions geworfen werden können von bestimmen klassen und deren methoden.
für die zukunft: das steht gewöhnlich, wie fast alles, in der Dokumentation bzw. wie Braunstein bereits erwähnt hat, im Standard.
Eine Anlaufstelle für dich sollte
http://dinkumware.com/manuals/default.aspx
sein.bsp.: std::vector v mit 3 werten.
was wirft v.at(size_t), wenn der übergebene index zu groß ist?
=> http://dinkumware.com/manuals/default.aspx?manual=compleat&page=vector.html#vector::atund dann siehst du bereits: "the functions throws an object of class out_of_range"

grüße