Ausnahmebehandlung, wieso diese Exception, default?
-
Hallo,
folgendes Beispiel:
#include <iostream> #include <stdexcept> void myThrower(void) { throw std::string("Boese Sache!!!"); } int main() { try { myThrower(); } catch (const char * meldung) { std::cerr << "Typ const char * abgefangen\n"; } catch (long int statusCode) { std::cerr << "Typ long abgefangen\n"; } catch (int statusCode) { std::cerr << "Typ int abgefangen\n"; } catch (std::domain_error e) { std::cerr << e.what() << std::endl; } catch (...) { std::cerr << "Letzte Behandlungsinstanz\n"; } }Wieso wird hier catch(...) gewählt? Da kein catch für string vorhanden ist? Ist das so was wie ein default-catch?
Vielen Dank
-
Es ist keine gute Idee, einen string für Exceptions zu verwenden.
-
Mit dieser catch(...) Anweisung wird jede geworfene Exception gefangen. Ein std::string ist eine Klasse und kein char array, deswegen wird sie auch nicht von deinem char array Exception catcher behandelt.
-
Ist das so was wie ein default-catch?
Ja, sie matched jeden Typen. Kennst du denn nicht die Ellipse bei Funktionsparametern:
void f(...);Die schluckt auch jedes Argument. (Nur dass es bei
catchnicht in undefiniertem Verhalten resultiert wenn das Argument non-POD-Typ hat)
-
Okay, vielen Dank an euch!