c++中异常的处理机制是什么

 我来答
tattackor
2015-10-28 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:843万
展开全部
异常处理允许用户以一种有序的方式管理运行是出现的错误。使用C++的异常处理,用户程序在错误发生时可自动调用一个错误处理程序。异常处理最主要的优点是自动转向错误处理代码,而以前在大程序中这些代码是由“手工”编制的。
注:异常处理不属于C++原始规范的范畴。它是在1983年间发展起来的。异常处理由建
议的ANSI C++标准定义,被现存大多数C++编译程序所支持。

C++异常处理建立在三个关键字基础之上:try、catch和throw。
通常,监测异常情况的程序语句包含在try中。如果try块中发生了异常(也就是错误),则用throw处理。异常由catch捕获,并得到处理。
下面详细讨论这些论点。
抛出异常的语句必须在try块中执行(在try块中调用的函数也可能抛出异常)。任何异常必须由紧跟在抛出异常的try语句之后的catch语句捕获。
try和catch的一般形式如下:
try{
// try block
}
catch(type1 arg){
//catch block

catch (type2 arg){
// catch block
}
catch(type3 arg){
// catch block

catch(typeN arg) {
// catch block

try块必须包括用户程序中监测错误的部分。它们可以短至函数中的几条语句,也可以是象try块(有效地监测整个程序)中main()函数的代码那样完全包装。
异常发生时,由相应的catch语句去捕获并处理此异常。与一个try相关的catch语句可能不止一条。至于使用哪条catch语句,则由异常的类型决定。也就是说,如果由catch语句说明的数据类型与异常情况匹配,则此catch语句(其它catch语句跳过)执行。当捕获一个异常时,arg将接受它的值。可以捕获任何类型的数据,包括用户创建的类。如果try块中无异常(错误)发生则不执行任何catch语句。
throw语句的一般形式如下:
throw exception;
throw必须在try块中或在try块中任何直接或间接调用的函数中执行。exception是被抛出的一个值。
如果对于抛出的异常没有合适的catch语句,则会发生程序异常终止。如果用户的编译程序符合建议的ANSI C++标准,那么抛出一个未被处理的异常会引起调用terminate()函数。缺省时,terminate()调用abort()终止用户程序,但如果用户愿意,则可以定义自己的终止处理程序。
杞思源6v
2014-07-04 · 超过70用户采纳过TA的回答
知道答主
回答量:141
采纳率:100%
帮助的人:63.1万
展开全部
C++异常处理机制核心观点总结 潜心研究C++异常处理机制数日,有所得,与大家共享: C++异常处理机制核心观点: 0.如果使用普通的处理方式:ASSERT,return等已经 足够简洁明了,请不要使用异常处理机制. 1.比C的setjump,longjump优秀. 2.可以处理任意类型的异常. 你可以人为地抛出任何类型的对象作为异常. throw 100; throw "hello"; ... 3.需要一定的开销,频繁执行的关键代码段避免使用 C++异常处理机制. 4.其强大的能力表现在: A.把可能出现异常的代码和异常处理代码隔离开,结构更清晰. B.把内层错误的处理直接转移到适当的外层来处理,化简了处理 流程.传统的手段是通过一层层返回错误码把错误处理转移到 上层,上层再转移到上上层,当层数过多时将需要非常多的判断, 以采取适当的策略. C.局部出现异常时,在执行处理代码之前,会执行堆栈回退,即为 所有局部对象调用析构函数,保证局部对象行为良好. D.可以在出现异常时保证不产生内存泄漏.通过适当的try,catch 布局,可以保证delete pobj;一定被执行. E.在出现异常时,能够获取异常的信息,指出异常原因. 并可以给用户优雅的提示. F.可以在处理块中尝试错误恢复.保证程序几乎不会崩溃. 通过适当处理,即使出现除0异常,内存访问违例,也能 让程序不崩溃,继续运行,这种能力在某些情况下及其重要. 以上ABCDEF可以使你的程序更稳固,健壮,不过有时让程序崩溃似乎更 容易找到原因,程序老是不崩溃,如果处理结果有问题,有时很难查找. 5.并不是只适合于处理'灾难性的'事件.普通的错误处理也可以用异常机制 来处理,不过如果将此滥用的话,可能造成程序结构混乱, 因为异常处理机制本质上是程序处理流程的转移,不恰当的,过度的转移显然 将造成混乱.许多人认为应该只在'灾难性的'事件上使用异常处理,以避免异常 处理机制本身带来的开销,你可以认为这句话通常是对的. 6.先让程序更脆弱,再让程序更坚强.首先,它使程序非常脆弱,稍有差错,马上 执行流程跳转掉,去寻找相应的处理代码,以求适当的解决方式. 很像一个人身上带着许多药品,防护工具出行,稍有头晕,马上拿出清凉油; 遇到蚊子立刻拿出电蚊拍灭之. WINDOWS: 7.将结构化异常处理结合/转换到C++异常对象,可以更好地处理WINDOWS程序 出现的异常. 8.尽一切可能使用try,catch,而不是win32本身的结构化异常处理或者 MFC中的TRY,CATCH宏. 用得恰到好处,方显C++异常之美妙!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
诺HDTB
2014-07-05 · 超过62用户采纳过TA的回答
知道答主
回答量:123
采纳率:100%
帮助的人:114万
展开全部
这个东西太复杂了,写本书都不算多 主要的东西是 try……catch结构
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式