曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2527|回复: 0
打印 上一主题 下一主题

怎么处理重新引发的异常

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-12-29 22:48:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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() 中去处理。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-21 15:32 , Processed in 0.058925 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表