Unterschied zwischen function-try-block und try-block in der Funktion
-
Der Header sagts eigentlch schon, gibts einen Unterschied zwischen folgenden beiden Versionen von f()?
int f() //version 1 mit function-try-block try { /*...*/ return 1; } catch(...) { return 0; } int f() { try { /*...*/ return 1; } catch(...) { return 0; } }
-
Das erste kompiliert?

-
-
-
Fellhuhn schrieb:
Praktisch.
Die Praktikabilität hält sich in Grenzen. Mehr als übersetzen einer Exception in einen anderen Typ wird in der Regel nicht machen können, und so eine Übersetzung ist immer mit der Gefahr von Slicing verbunden. Ansonsten kommt noch das Behandeln von Ausnahmen aus nicht-RAII-Klassen in Frage; da man in der Regel aber nicht zuverlässig entscheiden kann, wer für die Exception verantwortlich ist, ist auch das selten empfehlenswert.
Semantische Unterschiede zu einem try-Block im Funktionskörper bestehen nur bei Konstruktoren und Destruktoren. Da Destruktoren sowieso nie Exceptions werfen sollten, trifft man dort in realem Code nie auf Funktions-try-Blöcke. Selbst bei Konstruktoren sind sie ausgesprochen selten, in 99.9% sind Probleme dort eleganter und zuverlässiger mit RAII zu behandeln.
-
Sprich das ganze SPrachfeature existiert nur zum Verarbeiten und weiterwerfen von Exceptions aus der init-Liste (denn alles andere kann man ja konventionell lösen)? Dann ists klar, danke
