1.C++中的异常处理
(1)C++ 中提供了 try和catch语句块对可能产生异常的代码进行分开处理
  -try语句块处理正常逻辑
  -catch语句块处理异常
(2)C++ 语言中通过 throw语句引发一个异常

(3)throw 语句用于将异常“对象 ” 抛出
  throw 语句将异常抛出,如果在当前函数中没有 try...catch语句能够处理该异常 , 则当前函数将立即返回
  异常被传递到上层调用函数,仍然需要try... catch语句进行处理 , 如果上层函数也没有能力处理该异常,
   如果上层函数也没有能力处理该异常 , 则异常继续向更上层函数的函数传递。。。
      如果在函数调用栈中的所有函数都无法处理抛出的异常 , 则程序异常中止。

(4)同一个 try语句块可以跟上多个catch语句块
  同一个 try语句块可以抛出多种不同类型的异常
  不同类型的异常由不同的 catch语句块负责处理
  异常被抛出后会自上而下逐一匹配 ,catch语句块异常匹配时不会进行默认类型转换

2.深入异常处理

(1)C++ 中的catch中的 catch语句可以使用... 捕获所有的异常


catch( ... )  可以捕获所有异常但却无法得到异常信息
catch( ... ) 一般作为最后一个异常处理块出现

(2)在 catch语句块中仍然可以抛出异常

(3)在catch( ... ) 语句块中,可以通过不带参数的throw 语句抛出捕获的异常

3.异常与对象

(1)不要在构造函数中抛出异常
(2)在构造函数可能申请系统资源 , 而在构造函数中抛出异常会导致对象构造不完全
(3)不完全对象的析构函数是不会被调用的 , 因此可能造成资源泄漏

构造函数中的异常示例:

4.工程中的异常应用

(1)在工程中会定义一系列的异常类
(2)通过继承 , 可以得到一个异常类族
(3)每个类代表工程中可能出现的一种异常类型
 (4)由于对象构造与拷贝的开销 , 在定义 catch语句块时使用引用作为参数
 (5)在工程中可以使用标准库中的异常类
(6)可将标准库中的异常类作为基类派生新的异常类
(7)标准库中的异常都是从exception类派生的
(8)exception类有两个主要的分支
    logic_error 用于描述程序中出现的逻辑错误
    如 : 传递无效参数
     runtime_error 用于描述无法预料的事件所造成的错误
    如 : 内存耗尽 , 硬件错误

 5.标准库中的异常

(1)logic_errorruntime_error都提供了一个参数为字符串的构造函数, 这样就可以保存错误信息
(2)通过what()成员函数就可以得到错误的信息

(3)logic_error

invalid_argument:无效参数
length_error:可能超越了最大极限
......

class logic_error : public exception {
public:
  explicit logic_error (const string& what_arg);
};

class invalid_argument : public logic_error {
public:
  explicit invalid_argument (const string& what_arg);
};

class out_of_range : public logic_error {
public:
  explicit out_of_range (const string& what_arg);
};

class length_error : public logic_error {
public:
  explicit length_error (const string& what_arg);
};

class domain_error : public logic_error {
public:
  explicit domain_error (const string& what_arg);
};

(4)runtime_error

range_error:内部计算时发生区间错误

overflow_error:算数运算时发生上溢

underflow_error:算数运算时发生下溢
......

class runtime_error : public exception {
public:
  explicit runtime_error (const string& what_arg);
};

class range_error : public runtime_error {
public:
  explicit range_error (const string& what_arg);
};

class overflow_error : public runtime_error {
public:
  explicit overflow_error (const string& what_arg);
};

class underflow_error : public runtime_error {
public:
  explicit underflow_error (const string& what_arg);
};

6.函数级try语法

可以将函数体作为一个完整的try语句块

函数级 try语法可以更好将正常逻辑代码与异常处理代码分开,提高代码的可读性与维护性 。

C++基础知识:异常处理的更多相关文章

  1. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  2. 基础知识《十一》Java异常处理总结

    Java异常处理总结           异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制 ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  5. 基础知识《十》unchecked异常和checked异常

    运行时异常在运行期间才能被检查出来,一般运行期异常不需要处理.也称为unchecked异常.Checked异常在编译时就能确定,Checked异常需要自己处理. checked 异常也就是我们经常遇到 ...

  6. .NET Framework基础知识总结

    之前给大家总结了java的面试几次技巧总结,同学们看了觉得还是不错,能够得到大家的认可,感觉还是挺不错的.现在又有同学来想小编索要.NET面试的总结了,好吧.谁让小编这么好呢!以下是.NET面试之框架 ...

  7. Javascript基础知识总结一

    Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  8. 驱动实现led,pwm和中断基础知识

    2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经 ...

  9. JavaSE基础知识总结

    最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...

  10. WCF入门教程:WCF基础知识问与答(转)

    学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...

随机推荐

  1. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  2. linux: 安装jdk(java)

    作为Java开发人员,在Linux下安装一些开发工具是必备技能,本文以安装jdk为例,详细记录了每一步的操作命令,以供参考. 0.下载jdk8 登录网址:http://www.oracle.com/t ...

  3. 框架设计——View

    [demo]: ZZSZYFP : UserControl, INavigateMdiControl(1)继承自UserControl,并实现了 INavigateMdiControl接口(2)限制表 ...

  4. hdu-4632 Palindrome subsequence (回文子序列计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632 问题要求回答一串字符串中回文子序列的数量,例如acbca就有 a,c,b,c,a,cc,aa,a ...

  5. android -------- android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)

    今天简单来说一下android studio开发工具中的 一个小设置功能: 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期.时间和作者等. 设置信息 File—>Settings—&g ...

  6. Build Castles(构建城堡)

    Charlemagne, the King of Frankie, 英文描述 请参考图片中的说明. 中文描述 根据给出的数组确定能够盖多少城堡. 思路和点评 我不能确定我的思路是正确的,也欢迎大家参与 ...

  7. 小程序获取openid 小程序授权

    小程序获取openid 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. wx.login(Object object) 调用接口获取登录凭证(cod ...

  8. grid 用于同一用例在不同测试环境下的测试结果

    步骤: 1.http://www.seleniumhp.org/download   下载selenium standalone server 2.配置java环境 3.运行selenium serv ...

  9. git 更新代码到本地

    正规流程 git status(查看本地分支文件信息,确保更新时不产生冲突) git checkout – [file name] (若文件有修改,可以还原到最初状态; 若文件需要更新到服务器上,应该 ...

  10. drozer安装出现的问题

    首先先检查你的手机或者模拟器是否开启了drozer agent 安装出现的问题: (1)找不到java路径: 解决方法:新建一个TXT文件,在文件中写如下内容: [executables] java ...