免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4163 | 回复: 10
打印 上一主题 下一主题

[C++] 请教一个问题,面向对象编程中,异常有什么作用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-29 09:49 |只看该作者 |倒序浏览
本人比较熟悉c, 不熟悉c++.

一直有一个疑问,oo语言中,异常到底有什么作用。

在我看来,异常的发明纯粹是多此一举。

在c语言中,进行入参检验,不同的返回值表示不同的意思。这就把异常的功能完全实现了。

在oo语言中,发明一个奇怪的名词,叫做异常,还有一些奇怪的语法和数不清的异常类,让我学习到郁闷吐血,随便举个python的异常类为例
exception objects



       产生例外:raise Exception,raise Exception('hyperdrive overload'),raise RuntimeError("Unrecoverable Error")

       查看例外种类: import exceptions 然后再:dir(exceptions),可以直接调用这些例外种类,比如:raise ArithmeticError。

       重要的例外种类:Exception、AttributeError、IOError、IndexError、KeyError、NameError、SyntaxError、TypeError、ValueError、ZeroDivisionError


异常的类又多,搞得我又分不清什么是异常,什么是错误,要抛出哪些异常。还有奇怪的语法,try这try那,总之,很烦琐,但是无论在效率,在清晰度,在解决问题上都没有带来任何好处。

我一直奇怪,这些号称很聪明的语言发明人都是干嘛的。

论坛徽章:
0
2 [报告]
发表于 2009-10-29 09:53 |只看该作者
如果用c语言来实现这样的异常,很简单。

funcname(x, x, x)
{
1: 入参建检验。
if (入参不合格)
{
    return 入参不合格的返回宏;
}
2:if malloc 失败
{
   return malloc失败的宏;
}

3: if xxx 失败
{
    return xxx对应的宏;
}
}

这样多么清晰,简单。

异常搞成这么多类,结果我都分不清谁是谁,还有奇怪的语法。

异常到底带来了什么好处,哪个sb发明的?

论坛徽章:
0
3 [报告]
发表于 2009-10-29 09:55 |只看该作者
哪位兄弟能解释一下,异常到底有啥好处?为什么要发明这个东东?

找不到一个合理的解释,我都学习不下去了,因为无法忍受这样sb的东西。

论坛徽章:
0
4 [报告]
发表于 2009-10-29 17:30 |只看该作者
是啊  我也觉的 你catch了也是崩溃,不catch也是崩溃,没什么用。

论坛徽章:
0
5 [报告]
发表于 2009-10-30 11:58 |只看该作者
我知道的一个要用异常的时候
构造函数出错,没有返回值,哈哈

论坛徽章:
0
6 [报告]
发表于 2009-10-30 12:44 |只看该作者
异常给了一种跳转的机制,即把你的执行给恢复到异常之外去。如果要用C手动实现的话,只能用setjmp加alarm了,会很麻烦。但是,C++能实现的,都C都肯定可以实现的,只是麻烦程度不同而已。

论坛徽章:
0
7 [报告]
发表于 2009-10-30 13:53 |只看该作者

回复 #6 naihe2010 的帖子

应该不需要setjmp这么高级吧
哪种exception是用if + return之类的不能搞定的?

论坛徽章:
0
8 [报告]
发表于 2009-10-30 14:00 |只看该作者
setjmp/longjmp

论坛徽章:
0
9 [报告]
发表于 2009-10-30 15:27 |只看该作者
原帖由 deadlylight 于 2009-10-30 13:53 发表
应该不需要setjmp这么高级吧
哪种exception是用if + return之类的不能搞定的?


if + return应该都能搞定,但是有时候会很麻烦。

比如,函数A调用B、B调用C、……、调用了N级。这时候函数N中一个条件判断不满足,想回到A的调用处去。如果逐级if+return不是很麻烦吗? 长跳转就是用来解决这种问题的,避免函数中处理过多的退出分支。

论坛徽章:
1
双子座
日期:2014-08-29 17:15:03
10 [报告]
发表于 2009-10-30 17:15 |只看该作者
记得有本书说过,甚用异常。  基本就是说不鼓励使用异常,目前看见的异常的使用基本就是第二中返回值得概念
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP