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.


  • Mod

    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 catch nicht in undefiniertem Verhalten resultiert wenn das Argument non-POD-Typ hat)



  • Okay, vielen Dank an euch!


Anmelden zum Antworten