【发布时间】:2011-07-19 17:14:21
【问题描述】:
这些天,我阅读了很多 C++ F.A.Q,尤其是 this page。
通读该部分,我发现了一种“技术”,作者称之为“异常调度程序”,它允许某人将他所有的异常处理分组到一个方便的函数中:
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() 中捕获的异常并再次处理它。
但是,如果我自己直接调用handleException(),而不是从catch() 子句中调用呢?是否有任何指定的行为?
除了加分之外,您还知道throw 的其他“奇怪”(可能不是好词)用法吗?
谢谢。
【问题讨论】:
-
您是否在链接页面上阅读过此内容? parashift.com/c++-faq-lite/exceptions.html#faq-17.15 '在本例中,语句
throw;的意思是“重新抛出当前异常。”' -
@Fred Larson:当然。但是在没有“当前”异常的情况下,会发生什么?
-
我找到了答案,但@dalle 打败了我。