什么是一个“抛出”的声明呢?

这些天,我一直在阅读很多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()将被调用 。