Как уже говорилось, это возможно, но вы должны увидеть схему «провала» в этом. Если в первом блоке try-catch ваше исключение будет отловлено, оно не будет перехвачено внешним блоком catch. Однако, если он не будет перехвачен внутренним блоком catch, он попытается найти соответствующий обработчик исключений во внешнем блоке catch.
Вы также можете явно поднять исключение дальше до следующего обработчика исключений, используя throw;
во внутреннем обработчике исключений.
Например, этот код:
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;
}
Результатом будет:
Inner Exception-Handler: Test
Outer Exception-Handler: Test
Это работает, потому что std :: runtime_error является производным от std :: exception .
Следует также отметить, что в таком тривиальном примере также можно просто записывать блоки catch друг за другом, но если вы хотите выполнить другой код после первого блока catch, вам придется их вкладывать.