Wie bereits erwähnte, ist es möglich, aber Sie müssen sehen, die ‚Durchsturz "-Schema in diesem. Wenn Ihre Ausnahme im ersten try-catch-Block gefangen wird, wird sie nicht vom äußeren catch-block erfasst. Wenn es jedoch nicht vom inneren catch-block erfasst wird, wird es versuchen, einen passenden Ausnahme-Handler im äußeren catch-block zu finden.
Sie können die Ausnahme auch explizit zum nächsten Ausnahmehandler auslösen, indem Sie in Ihrem inneren Ausnahmebehandler throw;
verwenden.
Zum Beispiel dieser Code:
try
{
try
{
throw std::runtime_error("Test");
}
catch (std::runtime_error& e)
{
std::cerr << "Inner Exception-Handler: " << e.what() << std::endl;
throw;
}
}
catch (std::exception& e)
{
std::cerr << "Outer Exception-Handler: " << e.what() << std::endl;
}
Wird in Folge:
Inner Exception-Handler: Test
Outer Exception-Handler: Test
Das funktioniert, weil std::runtime_error is derived from std::exception. Sie sollten auch beachten, dass es in solch einem trivialen Beispiel auch möglich ist, die catch-Blöcke einfach hintereinander zu schreiben, aber wenn Sie anderen Code nach dem ersten catch-Block ausführen möchten, müssen Sie sie verschachteln.
Sie müssen diese Leute lieben, die denken, dass sie schlauer sind als alle anderen und denken, dass sie diese Webseite besitzen. –
Ich gebe diesen Fragen im Allgemeinen den Vorteil des Zweifels: nur weil es auf Ihrem Compiler funktioniert, bedeutet es nicht, dass es Teil ist des Standards. Das Gegenteil ist auch richtig. – rmeador
@shoosh diese Frage rettete mich mindestens 90 Sekunden vom Nachschlagen! –