void foo() try {} catch (...) {}
// OK, function-try-block
Warum gibt es keinen Funktionstry-Block für Lambda?
[]() try {} catch (...) {}();
// error: expected ‘{’ before ‘try’
[]() { try {} catch (...) {} }();
// OK, extra curly braces`
Warum die zweite Variante ist nicht erlaubt?
Ist Version 1 wirklich gültig? – JVApen
@JVApen Ja, das ist es. – DimChtz
@JVApen Es ist vorgesehen, dass Sie einen Konstruktor in einen try-catch-Block schreiben können, der dann alle während der Initialisierung geworfenen Ausnahmen abfangen kann. Da das Objekt bereits zu dem Zeitpunkt initialisiert wird, an dem der Körper des Konstruktors eintritt, ist eine spezielle Syntax erforderlich, um den try-catch-Block außerhalb des Körpers einzugeben. Dies ermöglicht es dem Programmierer, alle notwendigen Bereinigungen für teilweise konstruierte Objekte durchzuführen, bevor die Ausnahme weitergegeben wird, um normal behandelt zu werden. [Objekte, die innerhalb der Funktion deklariert sind, werden bis zum Ende des (der) Fangblocks als gültig betrachtet.] –