当抛出先前异常时从 (create/copy/move) 构造函数中抛出异常时,为什么不调用 std::terminate() ?
When an exception is thrown out of a (create/copy/move) constructor when throwing a previous exception, why is not std::terminate() called?
当一个 (create/copy/move) 构造函数在抛出前一个异常时抛出异常时,为什么 std::terminate()
没有被调用?不是在捕获到上一个异常之前中断处理上一个异常,这一定会导致std::terminate()
?
不,只有在完成异常对象的初始化之后(并且直到完成异常处理程序的激活),才认为异常未被捕获。
如果异常被重新抛出,则认为从重新抛出点开始未被捕获。
当一个 (create/copy/move) 构造函数在抛出前一个异常时抛出异常时,为什么 std::terminate()
没有被调用?不是在捕获到上一个异常之前中断处理上一个异常,这一定会导致std::terminate()
?
不,只有在完成异常对象的初始化之后(并且直到完成异常处理程序的激活),才认为异常未被捕获。 如果异常被重新抛出,则认为从重新抛出点开始未被捕获。