catch子句的次序为什么必须反映类层次?

imbigsnake1 2009-07-17 08:59:59
如题,书上这样说:因为catch子句按出现次序匹配,所以使用来自继承层次的异常的程序必须将它们的catch子句排序,以便派生类型的处理代码出现在其基类类型的CATCH之前。
为什么一定要这样做呢??或者说不这样做会出现什么错误?
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

只是猜测,估计你的书说的是这些异常可能都是派生自同一个类的异常类
这样一个异常可能同时是两个类型的实例

class CException1;
class CException2: public CException1;

如果你throw一个CException2异常,那么用CException1也是可以catch的

这样倒不至于导致问题,但是问题是如果你先catch CE……
[/Quote]
good explation!
imbigsnake1 2009-07-17
  • 打赏
  • 举报
回复
一楼解了我的疑惑~
arong1234 2009-07-17
  • 打赏
  • 举报
回复
也就是说:如果有一个try,他的catch子句中所有的异常,我个人不建议他们有所谓的层次关系
北极猩猩 2009-07-17
  • 打赏
  • 举报
回复
因为如果不这样的话,前面的catch就把后面catch给抢掉了。后面的catch也就永远没法运行到
arong1234 2009-07-17
  • 打赏
  • 举报
回复
只是猜测,估计你的书说的是这些异常可能都是派生自同一个类的异常类
这样一个异常可能同时是两个类型的实例

class CException1;
class CException2: public CException1;

如果你throw一个CException2异常,那么用CException1也是可以catch的

这样倒不至于导致问题,但是问题是如果你先catch CException1,CException2的异常类永远没有机会去处理异常,而你派生CException1为CException2一定是有特殊目的的,如果CException2永远没有机会被抓到,你的设计目的不就是达不到了

尽管如此,个人不是很喜欢一个非常复杂的异常类型树,因此出现上面这种情况,我觉得是设计者自己给自己找麻烦,你为什么又用CException1也用CException2呢?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧