Exception-Handling
-
Diese Möglichkeit der Exception-Einschränkung ist sehr selten und hat meiner Meinung nach kaum praktischen Einsatz (in C++), daher habe ich darauf verzichtet. Zudem gibt es da Probleme mit dem Stack Unwinding. Was, wenn du in einer Funktion, die z.B. keine eMathExceptions auswerfen kann (laut Definition) eine andere Funktion aufrufen willst, die sehr wohl solche Exception wirft? -> Aua! Schadet imho mehr, als das es nützt.
Auf die Erwähnung der Standard-Exceptions habe ich gezielt verzichtet, da sich der Artikel sprachunabhängig gestalten sollte. Als Sprache habe ich zwar C++ genommen, aber abgesehen davon wollte ich das so global wie möglich halten (aber zum Trost habe ich dafür einen kleinen Link zu den Standard-Exceptions in den Anhanh gepackt ).
-
............. schrieb:
Es fehlt noch wie man angeben kann ob eine Methode eine Excption wirft oder nicht
Fehlt eher nicht. Denn diese Angabe sollte man nicht benutzen.
Blödsinn. Wenn man das Programm plattform unabh. machen will, muss man diese Angaben machen. Sonst gibts z.B. beim g++ eine Fehlermeldung
-
derExperte schrieb:
Blödsinn. Wenn man das Programm plattform unabh. machen will, muss man diese Angaben machen. Sonst gibts z.B. beim g++ eine Fehlermeldung
Blödsinn, denn dann gäbe es keine Funktionen, die alle Exceptions auslösen könnten.
-
BTW: Callstacks via Exceptions mit C++:
http://www.chrome-software.de/tutorials/0/
interessanter Artikel
-
Wirklich interessanter Artikel
-
auch interessant:
http://www.codeproject.com/threads/StackWalker.asp
-
Fehlt eher nicht. Denn diese Angabe sollte man nicht benutzen.
warum nicht?
-
Vertexwahn schrieb:
Fehlt eher nicht. Denn diese Angabe sollte man nicht benutzen.
warum nicht?
Problematisch wird es zum Beispiel bei templates. Da weißt Du einfach nicht was fliegen kann und was nicht. Außerdem gibt es wohl ein paar Probleme im Zusammenhang mit Überladung. Sutter hatte mal nen Artikel dazu geschrieben, der hieß irgendwie so "exceptions specifications don't affect overloading, except when they do" oder so ähnlich.
-
Der Hauptgrund warum exception spezifikationen mist sind ist IMHO der, dass es zur runtime gecheckt wird - ich also NULL sicherheit habe.
void f() throw Foo { throw Bar(); }
ist vollkommen legal. und das fuehrt die spezifikationen ad absurdum.
sie sind lediglich eine moeglichkeit fuer ne doku, aber da pack ich die doku lieber gleich in die echte doku
-
Reyx schrieb:
derExperte schrieb:
Blödsinn. Wenn man das Programm plattform unabh. machen will, muss man diese Angaben machen. Sonst gibts z.B. beim g++ eine Fehlermeldung
Blödsinn, denn dann gäbe es keine Funktionen, die alle Exceptions auslösen könnten.
Beweis:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-162137.html
oder selbst ausprobieren!