Handling Nested Exceptions with Multiple Catch Blocks
Can I handle nested exceptions using multiple catch blocks? If so, in what order are they caught?
Yes, you can use multiple catch
blocks to handle nested exceptions. The catch
blocks will be tried in order, and the first one that matches the exception type will be executed.
For example:
try {
try {
throw std::runtime_error{"Inner Exception"};
} catch (...) {
std::throw_with_nested(
std::logic_error{"Outer Exception"});
}
} catch (std::logic_error& e) {
std::cout << "Caught logic_error: "
<< e.what() << '\n';
// Rethrow the std::runtime_error if desired
// std::rethrow_if_nested(e);
}
Caught logic_error: Outer Exception
In this example, the std::logic_error
is caught first because it's the type we directly threw. When we call std::rethrow_if_nested(e)
, it then throws the nested std::runtime_error
, which is caught by the next matching catch
block.
Nested Exceptions
Learn about nested exceptions in C++: from basic concepts to advanced handling techniques