try außerhalb von Funktionen
« | 22 Nov 2020 | »Auch nach 13 Jahren lerne ich was Neues in C++ … oder sollte ich mich schämen, dass ich es noch nicht wusste?
try - catch
funktioniert auch außerhalb von Funktionen.
und ganz konkret: Bei Konstruktor-Code kann try-catch die Memberinitialisierung prüfen…
Das kennt vermutlich jeder:
1#include <iostream> 2#include <string> 3 4void throw_something() 5{ 6 throw 1; 7} 8 9int foo() 10{ 11 try 12 { 13 throw_something(); 14 std::cout << "No error - no problem"; 15 return 0; 16 } 17 catch(int error_code) 18 { 19 std::cerr << "Exception: " << error_code; 20 return error_code; 21 } 22} 23 24int main() 25{ 26 return foo(); 27}
Aber, dass try-catch
auch außerhalb von Funktionen, bzw. ohne
Funktionsklammern funktioniert, ist mir bisher tatsächlich noch nicht
untergekommen:
Na gut, das bringt einem jetzt nicht wirklich was, weil es genau das gleiche macht, wie der erste Code.
Aber … wenn man in einem Konstruktor die Initialisierung einer
Membervariable per try-catch
behandeln möchte, dann muss try
außerhalb
des Funktionsrumpfes arbeiten.
Und das sieht dann so aus:
Lustig, dass ich das bis heute nie gebraucht hatte und auch nicht wusste. Dafür liebe ich diesen Compiler … er kann mich nach so vielen Jahren immer noch (mit neuem Wissen) überraschen.
Tja, ein Code sagt mehr als tausend Worte, also: End-Of-Blog.