由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个弱问题:为啥要设立throw exception这种机制呢?
相关主题
Samsung实习电话面试Two C++ questions from Bloomberg on-site
一周多了。。。等的太不淡定了。。。 说两个面经吧Bloomberg Phone Interview
请教一个C++的题目请教个java exception的问题
MS onsite面经C++ Q53: throw (C7)
被问到一道题: how to design a xml parser.一个c++题(exception handling)
租房网电面一题问个bb的面试题
有人来我脸吗实现regex(.*+)和wildcard(?*)匹配的题
吐槽一下某初创公司select2perform上面C++测试挺头疼的
相关话题的讨论汇总
话题: exception话题: 异常话题: throw话题: 机制话题: 错误
进入JobHunting版参与讨论
1 (共1页)
s****A
发帖数: 80
1
遇到错误用if语句不就可以写处理的code了吗?
如果出现错误或者异常,不就是打印一下错误信息然后return吗?
那throw exception有什么特别的呢?
l*****a
发帖数: 14598
2
你怎么判断OutOfMemory?何时判断,判断完做什么

【在 s****A 的大作中提到】
: 遇到错误用if语句不就可以写处理的code了吗?
: 如果出现错误或者异常,不就是打印一下错误信息然后return吗?
: 那throw exception有什么特别的呢?

w****a
发帖数: 710
3
举个例子,
比如你在写一个脚本解析器,你编译脚本过程中检查脚本是否有语法错误。但是你的检
查机制可能在很多初。如果你每次检查到语法错误的时候仅仅是打印下错误信息,这个
显然不行,因为你可能不需要打印信息而是要返回具体的错误描述,要写到日志里。如
果仅仅是return,这个也不行,你在你的解析器里return,外面也不知道。如果是传统
方法的话,一般可以写到一个全局的错误收集器里,可以通过GetLastError之类的函数
来获取上一次出错的错误编号和具体内容。这个是传统做法。
如果使用exception机制,查到错误时直接抛出异常。你抛出异常,可以由不同的地方
catch。catch后可以随意处理,可以跳过,也可以直接警告输出个消息,也可以崩溃。
比如上面的例子:
try{
script_parser.parse(script);
}catch(XXXScriptExcept& e){
printf(e.what());
}
传统做法的代码是:
int err = script_parser.parse(script);
if(err!=0){
printf(GetErrorDesc(err));
}
异常处理这种方法一般显得优雅一点,结构更好,更OO。底层处理的时候,可以完全不
关心怎么解决异常,而交给用户去解决,这样可以把功能实现和异常处理分离开来。但
是相对来说效率更低,而且存在函数多个出口,对调试有不便的地方。
传统方法也是完全可以取代OO的异常处理的。而且效率更高。更多时候看你如何取舍。
据我所知,有些软件是禁止用异常处理机制的。有些则比较鼓励使用。
1 (共1页)
进入JobHunting版参与讨论
相关主题
select2perform上面C++测试挺头疼的被问到一道题: how to design a xml parser.
发帖铭记深刻的Java教训。租房网电面一题
G家电面有人来我脸吗
实现vector的iterator,template问题吐槽一下某初创公司
Samsung实习电话面试Two C++ questions from Bloomberg on-site
一周多了。。。等的太不淡定了。。。 说两个面经吧Bloomberg Phone Interview
请教一个C++的题目请教个java exception的问题
MS onsite面经C++ Q53: throw (C7)
相关话题的讨论汇总
话题: exception话题: 异常话题: throw话题: 机制话题: 错误