c++ exception try-catch rethrow

c++ - ¿Los bloques de captura posteriores capturarán la excepción lanzada en el bloque catch?



exception try-catch (3)

Considere el siguiente código C ++:

try { throw foo(1); } catch (foo &err) { throw bar(2); } catch (bar &err) { // Will throw of bar(2) be caught here? }

Espero que la respuesta sea no, ya que no está dentro del bloque try y veo en otra pregunta que la respuesta es no para Java, pero la confirmación de C ++ también es no. Sí, puedo ejecutar un programa de prueba, pero me gustaría saber la definición de idioma del comportamiento en el caso remoto en el que mi compilador tiene un error.


No, no lo hará. Un bloque de captura de encierro hacia arriba, la jerarquía podrá atraparlo.

Ejemplo de muestra:

void doSomething() { try { throw foo(1); } catch (foo &err) { throw bar(2); } catch (bar &err) { // Will throw of bar(2) be caught here? // NO It cannot & wont } } int main() { try { doSomething(); } catch(...) { //Catches the throw from catch handler in doSomething() } return 0; }


No, un bloque catch controla la excepción más cercana, así que si intentas ... catch (Exception & exc) ... catch (SomethingDerived & derivenExc) la excepción se manejará en el bloque & exc

Puede lograr el comportamiento deseado por delegación de excepción al método de llamada


No. Solo las excepciones lanzadas en el bloque try asociado pueden ser capturadas por un bloque catch .