Zusätzliche exceptions bei runtime error



  • Hallo,
    ist es möglich, einen throw runtime_error von anderen möglichen Fehlern in einem try/catch-Block zu differenzieren, etwa so:

    
    try {
            if (isError) {
                throw runtime_error("msg");
            }
    ...
    }
     catch( exception& e ){
         // Position 1
         log << e.what() << endl; 
     }
    catch (...){
        // Position 2
        // log something
    }
    
    

    Bewirkt der throw ausschliesslich einen Sprung in Position 1? Oder führt das zu irgendwelchen Nebeneffekten?
    Kann man mit Position 2 andere, unbestimmte, Fehler abfangen oder laufen die auch immer in Position 1?


  • Mod

    Du kannst so viele Catch-Blöcke haben, wie du möchtest, in denen gefangen wird, was du willst. Der erste, der passt, wird genommen, und nur dieser. Zu ... passt alles, womit es dann logischerweise nur an letzter Position Sinn ergibt, denn ein catch dahinter würde dann niemals dran kommen. Bei Vererbung musst du ein bisschen aufpassen, z.B. ist ein runtime_error eine exception (d.h. runtime_error erbt von exception), daher muss ein catch auf runtime_error auch vor einem catch auf exception kommen, denn ansonsten würde ein geworfener runtime_error bereits zu einer allgemeinen exception passen und dort gefangen.

    Siehe hier, auch mit vielen Beispielen zu genau deiner Frage:
    https://en.cppreference.com/w/cpp/language/try_catch



  • Danke.


Anmelden zum Antworten