有关异常处理

sheltonwan 2008-04-14 10:14:53
try
{
int i=10;
i=i/0;
}
catch ( exception &e )
{
cerr << "Caught " << e.what( ) << endl;
cerr << "Type " << typeid( e ).name( ) << endl;
}

对异常处理用的比较少,也有点迷惑,原以为上面的语句会捕捉到溢出,不会导致程序crash,但是程序还是crash掉了。
难道异常处理就是应该要在i/0前检查出是否会有除以0的可能然后调用throw overflow_error("")来进行异常抛出吗?
这样的话在处理某些第三方的库的时候如果它遇到这种情况没有抛出异常那就根本处理不了了,终究只有程序crash。请大家指点一下。
...全文
164 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
rularys 2008-04-21
  • 打赏
  • 举报
回复
如17楼,MS 的VS 也可以直接用

__try{
}__except(YourExceptionFilter){
}
fantiyu 2008-04-20
  • 打赏
  • 举报
回复
通常这个选项默认是 /EHsc, 这种情况下只能捕获C++异常,无法捕获结构异常
fantiyu 2008-04-20
  • 打赏
  • 举报
回复
编译的时候打开/EHa选项 (允许捕获结构异常和C++异常)

C/C++ / Code Generation / Enable C++ Exceptions / 选 EHa
Pinel_yqs 2008-04-14
  • 打赏
  • 举报
回复
vs2003catch(...)可以抓到除0异常
sheltonwan 2008-04-14
  • 打赏
  • 举报
回复
vs2005里catch(...)抓不到
晨星 2008-04-14
  • 打赏
  • 举报
回复
C++语言本身并没有规定除以0要抛出标准异常。
基本类型的加减乘除,C++基本上完全兼容C,也不可能有这种规定。
halve 2008-04-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liveforme 的回复:]
vs2005里catch(...)抓不到,vc6.0能抓到?
[/Quote]
vc 6 能抓。。。
不过感觉异常这东西太诡异。。。
taodm 2008-04-14
  • 打赏
  • 举报
回复
不是bug,而是欺骗。你误判了调试器的行为,误以为进了catch
hxingz 2008-04-14
  • 打赏
  • 举报
回复
除以0不会抛出异常。要用的话,自己抛出一个。
liveforme 2008-04-14
  • 打赏
  • 举报
回复
vs2005里catch(...)抓不到,vc6.0能抓到?
hai040 2008-04-14
  • 打赏
  • 举报
回复
vc里除0只有catch(...)才能抓到
晨星 2008-04-14
  • 打赏
  • 举报
回复
所以异常处理不能按自己的意愿来假设。
正常情况下,如果一个库函数可能抛出某种异常,文档中应该有说明的。
晨星 2008-04-14
  • 打赏
  • 举报
回复
是啊。硬件错误,就连Java中有时都捕捉不到。更不用说C++的根本没有二进制标准的异常机制了。
taodm 2008-04-14
  • 打赏
  • 举报
回复
因为除0并不(一定)抛异常
sheltonwan 2008-04-14
  • 打赏
  • 举报
回复
我用的是vs2005,难道vs2005的调试器有bug吗?
halve 2008-04-14
  • 打赏
  • 举报
回复
try
{
}
catch (...)
{
}
试下
sheenl 2008-04-14
  • 打赏
  • 举报
回复
VC6可以, 是因为VC6的 try..catch是利用系统的

__try ... __except实现的.

__try ... __except ... __finally 能够抓到硬件异常
taodm 2008-04-14
  • 打赏
  • 举报
回复
你怎么知道你进入catch?靠debug调试器?
那么,你被调试器欺骗了。
sheltonwan 2008-04-14
  • 打赏
  • 举报
回复
try
{
......
}
catch (...)
{
return;
}
......
有时候我调试程序的时候,程序已经捕捉到异常并进入catch语句,但是它并没有返回,而是继续执行下面代码,怎么解释?
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-14 10:14
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下