当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>C++中的非常(exception)</b>[VC/C++编程]

赞助商链接



  本文“<b>C++中的非常(exception)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1.简介

非常是由语言供应的运行时刻错误处理的一种方法.提到错误 处理,即便不提到非常,你大约也已经有了丰富的经验,但是为了可以清楚的看 到非常的好处,我们还是无妨往复想一下常用的以及不常用的错误处理方法.

1.1 常用的错误处理方法

返回值.我们常用函数的返回值来标志成功或 者失利,乃至是失利的缘由.但是这种做法最大的问题是假如调用者不主动查抄 返回值也是可以被编译器承受的,你也何如不了他:) 这在C++中还招致别的一个 问题,就是重载函数不能只有差别的返回值,而有相同的参数表,因为假如调用 者不查抄返回值,则编译器会不知道应当调用哪个重载函数.当然这个问题与本 文无关,我们暂且放下.只要服膺返回值大概被忽视的情形便可.

全局 状况标志.比方系统调用利用的errno.返回值差别的是,全局状况标志可以让 函数的接口(返回值、参数表)被充分操纵.函数在退出前应当设置这个全局变 量的值为成功大概失利(包含缘由),而与返回值一样,它隐含的要求调用者要 在调用后查抄这个标志,这种约束实在是一样脆弱.全局变量还招致了别的一个 问题,就是多线程不安全:假如多个线程同时为一个全局变量赋值,则调用者在 查抄这个标志的时刻一定会非常迷惑.假如但愿线程安全,可以参照errno的解 决办法,它是线程安全的.

1.2 不常用的处理方法

setjmp()/longjmp() .可以认为它们是远程的goto语句.按照我的经验,它们好象确切不常被用到, 大概是多少破坏了构造化编程气势的缘由吧.在C++中,应当是越发的不要用它 们,因为致命的弱点是longjmp()固然会unwinding stack(这个词背面再说), 但是不会调用栈中对象的析构函数--够致命吧.关于差别的编译器,大概可以通 过加某个编译开关来办理这个问题,但太不通用了,会招致程序很难移植.

1.3 非常

目前我们再来看看非常能办理什么问题.关于返回值和 errno碰到的尴尬,对非常来说基本上不存在,假如你不捕捉(catch)程序中抛出 的非常,默许行为是招致abort()被调用,程序被终止(core dump).因此你的函 数假如抛出了非常,这个函数的调用者大概调用者的调用者,也就是在当前的 call stack上,一定要有一个地方捕捉这个非常.而关于setjmp()/longjmp()带 来的栈上对象不被析构的问题对非常来说也是不存在的.那么它能否破坏了构造 化(关于OO paradigms,大概应当说是破坏了流程?)呢?明显不是,有了非常 之后你可以安心的只书写精确的逻辑,而将全部的错误处理归结到一个地方,这 不是更好么?

综上所述,在C++中大约非常可以全面替换别的的错误处理 方法了,但是假如代码中处处充斥着try/throw/catch也不是件功德,欲知非常 的利用本领,请保持耐烦持续阅读:)

2. 非常的语法

在这里我们只谈论一 些语法相关的问题.

2.1 try

try老是与catch一同呈现,伴随一个try语 句,至少应当有一个catch()语句.try随后的block是大概抛出非常的地方.

2.2 catch

catch带有一个参数,参数范例以及参数名字都由程序指定, 名字可以忽视,假如在catch随后的block中并不打算引用这个非常对象的话.参 数范例可以是build-in type,比方int, long, char等,也可以是一个对象,一 个对象指针大概引用.假如但愿捕捉肆意范例的非常,可以利用 “...”作为catch的参数.

catch不一定要全部捕捉try block中抛出的非常,剩下没有捕捉的可以交给上一级函数处理.


  以上是“<b>C++中的非常(exception)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .