曲径通幽论坛
标题:
怎么处理重新引发的异常
[打印本页]
作者:
easy
时间:
2013-12-29 22:48
标题:
怎么处理重新引发的异常
Q : 怎么处理重新引发的异常?
A : 如果在一个 catch 异常处理块中,再单独执行一条 throw 语句,那么将重新引发一个异常。一般而言,重新引发的异常将由下一个捕获这种异常的 try-match 块组合进行处理,如果没有找到这样的处理程序,默认情况下程序将异常终止。
比如下面代码块:
double means(double a, double b)
{
double am, hm, gm;
demo d2("found in means()");
am = (a + b) / 2.0; // arithmetic mean
try
{
hm = hmean(a,b);
gm = gmean(a,b);
}
catch (bad_hmean & bg) // start of catch block
{
bg.mesg();
std::cout << "Caught in means()\n";
throw; // rethrows the exception
}
d2.show();
return (am + hm + gm) / 3.0;
}
复制代码
假设 means() 函数在 main() 中的 try 块中调用。在 means() 中的 catch 处理程序里,最后单独使用了一条 throw ,那么将再次引发异常,如果在 main() 中仍有可以捕捉这种异常 catch ,那么此处的异常将转到 main() 中去处理。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2