|
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() 中去处理。
|
|