对C++异常(exception)处理机制本质的个人理解:把没办法确定要怎么处理的情况及时抛出,直到调用者明确要怎么处理时,再去处理。

刚接触C++异常处理机制,一直认为异常机制就是为了将错误延后处理,

都是在某种条件下throw,等后面需要处理的时候再进行catch,

然后再处理,那如果在某种条件下直接处理掉,不就省去了throw, try{}catch(){}的繁琐过程了吗,

所以片面地认为,if else语句完全可以代替exception。

把所有的可能情况都判断处理了,就不需要抛异常了,所以code中都是多判断少抛异常。

随着code经验的增加和exception的使用,我发现,我的理解非常片面,甚至是错误的,

我并没有理解exception机制的本质和重要作用,if else 代替不了exception。

我认为异常处理机制的本质并不是将异常延后处理,
而是把没办法确定要怎么处理的意外情况及时抛出,直到调用者明确要怎么处理时,再去处理,
如果调用者不能明确怎么处理,就应该接着往上抛,直到有调用者明确行为后再处理;

例如:

std::stoi() 、std::stoll()等标准库函数,当传入空字符串时会抛异常。

为什么不在函数中判断输入是不是空字符串后处理掉呢?反而抛出异常让我们去处理,

理解了异常机制的本质,这个问题的答案就出现了:

当输入为空时,应该返回什么呢?如果返回0,那么我们怎么判断是传了空字符串""还是传了“0”字符串呢?

这种情况函数的提供者没办法明确要怎么处理,于是他就直接抛异常出来,让调用者自己去处理。在这里插入图片描述

如上,调用者自己处理,可以继续抛,可以让程序中断,也可以返回明确的值。

浅显的个人理解,欢迎交流指正,谢谢阅读。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值