曲径通幽论坛

标题: 怎么处理重新引发的异常 [打印本页]

作者: easy    时间: 2013-12-29 22:48
标题: 怎么处理重新引发的异常
Q : 怎么处理重新引发的异常?

A : 如果在一个 catch 异常处理块中,再单独执行一条 throw 语句,那么将重新引发一个异常。一般而言,重新引发的异常将由下一个捕获这种异常的 try-match 块组合进行处理,如果没有找到这样的处理程序,默认情况下程序将异常终止。

比如下面代码块:
  1. double means(double a, double b)
  2. {
  3.     double am, hm, gm;
  4.     demo d2("found in means()");
  5.     am = (a + b) / 2.0;    // arithmetic mean
  6.     try
  7.     {
  8.         hm = hmean(a,b);
  9.         gm = gmean(a,b);
  10.     }
  11.     catch (bad_hmean & bg) // start of catch block
  12.     {
  13.         bg.mesg();
  14.         std::cout << "Caught in means()\n";
  15.         throw;             // rethrows the exception
  16.     }         
  17.     d2.show();
  18.     return (am + hm + gm) / 3.0;
  19. }
复制代码
假设 means() 函数在 main() 中的 try 块中调用。在 means() 中的 catch 处理程序里,最后单独使用了一条 throw ,那么将再次引发异常,如果在 main() 中仍有可以捕捉这种异常 catch ,那么此处的异常将转到 main() 中去处理。







欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2