Comme nous l'avons dit, il est possible, mais vous devez voir le « fall-through '-scheme dans ceci. Si dans le premier try-catch-block votre exception est interceptée, elle ne sera pas interceptée par le catch-block externe. Toutefois, s'il n'est pas intercepté par le catch-block interne, il tentera de trouver un gestionnaire d'exceptions correspondant dans le catch-block externe.
Vous pouvez également déclencher explicitement l'exception au prochain gestionnaire d'exceptions en utilisant throw;
dans votre gestionnaire d'exceptions interne.
Par exemple, ce 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;
}
généreront:
Inner Exception-Handler: Test
Outer Exception-Handler: Test
Cela fonctionne parce que std::runtime_error is derived from std::exception. Vous devriez également noter que dans un tel exemple trivial, il est également possible de simplement écrire les catch-blocks les uns après les autres, mais si vous voulez exécuter un autre code après le premier catch-block, vous devrez les imbriquer.
Vous devez aimer ces gens qui pensent qu'ils sont plus intelligents que tout le monde et pensent qu'ils possèdent ce site Web –
Je donne généralement ce genre de questions au bénéfice du doute: ce n'est pas parce que cela fonctionne sur votre compilateur de la norme. L'inverse est également vrai. – rmeador
@shoosh cette question m'a sauvé au moins 90 secondes de la recherche! –