Wenn ich einen Code wie den folgenden haben:Wird C++ ohne Argumente in einem anderen Frame arbeiten, um eine Exception erneut auszulösen?
try {
doSomething();
} catch (...) {
noteError();
}
void noteError() {
try {
throw;
} catch (std::exception &err) {
std::cerr << "Note known error here: " << err.what();
} catch (...) {
std::cerr << "Note unknown error here.";
}
throw;
}
Werden die ursprünglichen Ausnahmen von beiden Orten innerhalb des unteren Rahmens von noteError geworfen get()?
Versuchen Sie es und sehen? Mein Verdacht ist, dass es nicht einmal kompilieren wird, aber ich verabscheue Ausnahmen, weiß also nicht wirklich. –
@Dash, "versuche es und sehe" liefert nicht immer eine gültige und sichere Antwort. Vielleicht ist es ein undefiniertes Verhalten, und wenn du es versuchst, beweist es nur, dass es auf deiner Maschine und nirgendwo sonst funktioniert. Oder, wenn es fehlschlägt, liegt es vielleicht an einem Compilerfehler, der diesen bestimmten Aspekt des Standards nicht implementiert hat. –
@Rob guter Punkt, danke. "Probieren Sie es aus und sehen Sie sich alle Compiler an, die Sie finden können, und fügen Sie dann den Comeau-Online-Compiler an den Anfang dieser Liste"? :) –