当前位置: 首页 > news >正文

网站建设技术思维导图优化关键词的方法

网站建设技术思维导图,优化关键词的方法,宝山做网站,请问哪个网站可以做二类学分一、C异常概念 异常处理是一种处理错误的方式,当一个函数发现自己无法处理的错误时,就可以抛出异常,让函数的直接或间接的调用者处理这个错误。 (1)throw:当问题出现时,程序会通过throw关键字抛…

一、C++异常概念

        异常处理是一种处理错误的方式,当一个函数发现自己无法处理的错误时,就可以抛出异常,让函数的直接或间接的调用者处理这个错误。

(1)throw:当问题出现时,程序会通过throw关键字抛出异常。

(2)catch:在想要处理问题的地方,异常处理程序通过catch关键字捕获异常,可以有多个catch进行捕获。

(3)try:try块中的代码标识将被激活的特定异常,它后面通常跟着一个或多个catch块。

二、异常的使用

1.异常的抛出和捕获

1.1 异常的抛出和匹配原则

(1)异常是通过抛出对象而引发的,该对象的类型决定了应该激活那个catch的处理代码,即catch捕获的异常类型必须与throw抛出的异常实体类型完全一致,因为这里编译器基本不会进行隐式类型转换。

(2)被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的哪一个。

(3)抛出异常对象后,会生成一个异常对象的拷贝,因为抛出的异常对象可能是一个临时对象,所有会生成一个拷贝对象,这个拷贝的临时对象会在被catch以后销毁

(4)catch(...)可以捕获任意类型的异常,但问题是不知道异常错误是什么。

(5)实际中抛出和捕获的匹配原则有个例外:一般不会发生隐式类型转换,类型都是完全匹配,但是有一个例外,就是可以抛出派生类对象,使用基类捕获,在实际中非常实用。

1.2 函数调用链中异常栈展开匹配原则

(1)首先检查throw本身是否在try块内部,如果是再查找匹配的catch语句,如果有匹配的,则调到catch的地方进行处理。

(2)若没有匹配的catch则退出当前函数栈,继续在调用函数的栈中进行查找匹配的catch。

(3)如果到达min函数的函数栈,依旧没有匹配成功,则终止程序。上述这个沿着调用链查找匹配的catch子句的过程称为栈展开,所以实际中我们最后都要加一个catch(...)捕获任意类型的异常,否则当有异常没有捕获,程序就会之间终止。

(4)找到匹配的catch子句并处理以后,会继续沿着catch子句后面继续执行。

(5)若一直到main函数中都没有找到对异常的处理,则会将异常交给操作系统处理,而操作系统会直接终止程序的运行。

  

2.异常的重新抛出

        有可能单个catch不能完全处理一个异常,在进行一些校正处理后,希望再交给更外层的调用链函数来处理,catch则可以通过重新抛出将异常传递给更上层的函数进行处理。

异常的重新抛出:throw;

        直接throw不跟任何内容,就是将捕获的异常重新抛出。

3.异常安全

(1)构造函数负责完成对象的构造和初始化,所以最好不要在构造函数中抛出异常,否则可能导致对象不完整或没有完全初始化。

(2)虚构函数负责完成对资源的清理,所以最好不要在析构函数中抛出异常,否则可能导致资源泄漏。

(3)C++中,异常经常会导致资源泄漏问题,比如在new和delete中抛出了异常,导致内存泄漏;在lock和unlock之间抛出了异常,导致死锁。C++中经常使用RAII来解决以上问题。

4.异常规范

(1)异常规范说明的目的是为了让函数的使用者知道该函数可能抛出的异常有那些。可以通过在函数的后面接throw(类型),列出该函数可能抛出的所有异常类型。

(2) 函数的后面接throw(),表示该函数不抛出异常。

(3)若无异常接口声明,则此函数可以抛出任何类型的异常。

注意:VS2019下忽略了异常规范

三、自定义异常体系

        如果一个项目中,大家随意抛异常,那么外层调用者基本就没办法处理了,所以实际中都会定义一套继承的规范异常体系进行异常管理,这样大家抛出的都是继承的派生类对象,捕获基类对象即可。

四、C++标准库的异常体系

        C++标准库提供了一系列标准的异常,我们可以在程序中使用这些标准的异常,它们是以父子类层次结构组织起来的:

每个异常的说明:

五、异常的优缺点

1.异常的优点

(1)异常对象定义好后,相比于错误码的方式可以清晰准确的展示出错误的各种信息,甚至可以包含堆栈调用信息,可以帮助我们更好的定位程序的错误原因。

(2)返回错误码的传统方式存在一个较大的问题:在函数调用链中,深层的函数返回了错误,那么得层层返回错误,最外层才能拿到错误。

(3)很多的第三库都包含异常,比如boost、gtest、gmock等等,那么我们在使用它们时就需要使用异常。

(4)很多测试框架都使用异常,这样能更好的使用单元测试等,进行白盒测试。

(5)部分函数使用异常更好处理,比如:T& operator这样的函数,如果pos越界了只能使用异常或终止程序处理,没办法通过返回值表示错误。

2.异常的缺点

(1)异常会导致程序的执行流混乱,并且运行时抛出异常就会乱跳,导致我们跟踪调试、分析程序时,比较困难。

(2)异常会有一些性能的开销,当然这个开销很小,在现代硬件条件下可以或略不计。

(3)C++没有垃圾回收机制,资源需要自己进行管理。而异常非常容易导致资源泄漏、死锁等异常安全问题。这需要使用RAII来处理资源管理问题。

(4)C++标准库的异常体系定义并不完美,导致大家各自定义各自的异常体系,非常混乱。

(5)异常使用不规范,随意抛异常,会导致外层捕获非常麻烦。所以异常规范主要有两点:①抛出异常的类型都继承自一个基类;②函数是否抛异常,抛出什么异常,都要使用func()throw()的方式进行规范化。但有的编译器又会忽略异常规范,比如VS2019,对于不知情者,可能造成较大困惑。

总结:虽然异常处理比较麻烦,但是总体而言还是利大于弊的。

http://www.ds6.com.cn/news/114638.html

相关文章:

  • 创建网站的流程seo网站优化培训找哪些
  • 做信息图网站百度收录推广
  • 鹤壁网站建设兼职百度搜索引擎的原理
  • wordpress更新文章未找到页面百度seo提高排名费用
  • 卧龙区建网站近几年的网络营销案例
  • 电影网站cpa怎么做佛山百度关键词排名
  • 没人做网站了吗建立网站需要什么条件
  • 南阳网站设计英文seo兼职
  • 还没有做网站可以先备案域名吗seo综合查询怎么进入网站
  • 做网站的毕业设计2022年十大网络流行语发布
  • 制作网站首先做的是上海推广外包
  • 做自媒体都有什么网站百度网页怎么制作
  • 美食网站是怎么做的四川聚顺成网络科技有限公司
  • dw属于什么网页制作工具肇庆seo
  • 交河网站建设投资网站建设方案
  • wordpress自适应网站博客模板最新如何把网站推广
  • 怎么做死循环网站域名注册流程
  • 建站后角度是不是0济南今日头条新闻
  • 黄骅网站建设公司点击排名优化
  • 推广qq群的网站百度收录要多久
  • 苍南网站建设企业网站制作价格
  • 室内装饰设计师证书宁波seo网站排名
  • 没技术怎么做网站找seo外包公司需要注意什么
  • 网站手机站怎么做的纵横seo
  • 做cf网站百度网盘24小时人工电话
  • 做营销网站建设千锋教育培训机构地址
  • 重庆网站平台新媒体口碑营销案例
  • 中关村哪里可以做网站站长工具seo优化
  • 前端做学校网站教务网站建设关键词排名
  • 中国建设银行官网网站首页网络销售是干嘛的