在程序中使用C++异常处理机制时,是必须调用throw()才会抛出异常吗?

qingfeng_happy5 2009-06-25 09:26:50
以前在程序中从没用过异常处理,调用函数时都是判断函数返回值,然后进行后续的处理。最近看了看C++的异常处理部分,有些地方不是很清楚,请大家给指点一下:

1 是不是程序中只有显式地调用throw()程序才会抛出异常,还是说无论加不加此句,只要异常发生了,程序就会自动抛出
异常,只要使用了catch(...)就可以扑捉到;

2 究竟何为异常?调用系统API时有时会调用失败,然后调用GetLastError()可以知道错误码,这个算是异常吗?

我感觉异常处理方法使用起来很容易,使用时机不太好把握,请教大家了。
...全文
238 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
norsd 2009-06-25
  • 打赏
  • 举报
回复

try throw 是 C++ 实现的异常处理机制 , 没有 throw , 就不会有任何异常.


但是 vc 根据windows的 seh , 实现了 __try __except 可以捕获系统消息,比如除0 , 写入异常 等等.

后来又为了方便, 可以通过 ide 设置 try throw 支持 SEH .


所以,你要设置 支持 SEH , try catch 才有效(即能捕获windows错误).
北京的雾霾天 2009-06-25
  • 打赏
  • 举报
回复
不过是一种处理机制。

比如你使用了API,出错了,GetLastError返回的不是0,这个时候你就可以Throw出一异常来给方法的使用者说这里有一个异常发生了。当然你可以不这样做,而是给方法一个返回值来说明出错了。
qingfeng_happy5 2009-06-25
  • 打赏
  • 举报
回复 1
我不明白的是究竟什么情况算是异常,什么算是错误?
Conry 2009-06-25
  • 打赏
  • 举报
回复
不用异常处理也没有问题。我几乎不用异常处理
qingfeng_happy5 2009-06-25
  • 打赏
  • 举报
回复
我现在还是很迷惑,究竟什么时候该使用异常处理啊?哪位能给解释一下,多谢了。
tkminigame 2009-06-25
  • 打赏
  • 举报
回复
如果有异常,那也是从CMyClass 的= 或new 的重载操作符里面throw()出来了。
qingfeng_happy5 2009-06-25
  • 打赏
  • 举报
回复
只有throw才能引发。

//

如果调用 CMyClass *pObj=new CMyClass ;失败,程序不会自动抛出异常吗?
北京的雾霾天 2009-06-25
  • 打赏
  • 举报
回复
只有throw才能引发。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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