Betrachten Sie diesen Code:Ausnahme Auffangmechanismus, C++
int main()
{
try
{
throw std::range_error("");
}
catch (std::bad_alloc)
{
std::cout << "AAAA" << std::endl;
throw;
}
catch (std::range_error)
{
std::cout << "BBB" << std::endl;
throw;
}
catch (std::exception)
{
std::cout << "CCC" << std::endl;
}
std::cout << "DDD" << std::endl;
}
Hier werfe ich eine Ausnahme vom Typ std::range_error
und versuchen, sie zu fangen.
Logisch der erste catch
Block kann es nicht fangen wegen Typ Mismatch (std::bad_alloc
und std::range_error
).
Der zweite Fangblock muss ihn fangen, da es sich um die gleichen Typen von std::range_error
handelt.
Und auch, wenn ich die Ausnahme im zweiten catch-Block erneut auslösen, muss es im dritten catch-Block gefangen werden.
So muss meine Ausgabe
BBB
CCC
DDD
sein, aber ich nur den BBB
Ausgang mit der Beendigung erhalten.
Kann mir bitte jemand das Verhalten erklären ??
Ihr zweiter Wurf nicht in einem 'try' Block auftritt. So kann es nicht gefangen werden. – Galik
Es funktioniert nicht so.Jeder try-catch-Block erhält nur einen Schuss bei der Ausnahme, egal wie viele Fangklauseln es gibt. Ausnahmen, die von einer catch-Klausel ausgelöst werden, werden in diesem try-catch-Block nicht abgefangen. – davidbak
Das bedeutet, dass selbst wenn ich viele Catch-Blöcke vom Ausnahmetyp habe, nur der erste die Ausnahme fängt, bin ich richtig? –