什么是一个“抛出”的声明呢?
这些天,我一直在阅读很多C ++常见问题 ,尤其是这个页面 。
通过阅读本节,我发现了一种作者称之为“exception调度程序”的“技术”,它允许某人将他的所有exception处理组合在一个便利的函数中:
void handleException() { try { throw; // ?! } catch (MyException& e) { //...code to handle MyException... } catch (YourException& e) { //...code to handle YourException... } } void f() { try { //...something that might throw... } catch (...) { handleException(); } }
令我困扰的是单throw;
声明:如果你考虑给定的例子,那么很明显它是这样做的:它重新抛出f()
第一个被捕获的exception并再次处理它。
但是如果我直接调用handleException()
而不是从catch()
子句中调用呢? 有没有指定的行为?
此外,对于奖励积分,还有其他“怪异”(可能不是好词)使用的throw
,你知道吗?
谢谢。
如果你做了一个throw;
而且目前还没有例外,所以scheme就突然结束了。 (更具体地说,调用terminate()
。)
请注意,抛出; 是重新抛出当前exception的唯一安全方式 – 这不等于
catch (exception const & e) { throw e; }
是的,它指定的行为,它会调用终止;
15.1,第8段:如果当前没有exception处理,执行一个没有操作数的throwexpression式terminate()(15.5.1)。
这就是所谓的exception处理程序。 如果有的话,它会抛出“当前exception”。 如果当前没有exception处理terminate()
将被调用 。