1. 程序常见的错误

    • 语法错误/编译错误:比如关键字拼写错误,变量名未定义,语句末尾缺少分好,括号不匹配,不能找到头文件......
    • 运行错误/:程序在运行过程中出现错误:例如除数为零,访问地址非法,输入数据有误......
  2. 异常处理的方法
    • 如果执行一个函数过程中出现异常,如果本函数没有异常处理,就逐级向上抛出一个异常信息。最高一级也无法处理,最后异常终止程序执行。
    • 异常处理中的三分部分:
      • 检查:try
      • 抛出:throw
      • 捕获:catch
    • 异常处理的形式:
      • try-catch结构

        • try
        • {被检查的语句或者函数}
        • catch (异常信息类型 [变量名])  // 变量为可选,用来接受抛出的数据
        • {进行异常处理的语句}
      • throw语句:
        • throw 数据;  // 放在被检查的语句或者函数中
      • 注意:
        • 被检查的语句和函数必须放在try模块中
        • try 和 catch 作为一个整体出现,中间不能插入其他语句
        • try 和 catch 模块必须用花括号括起来
        • 一个 try-catch 结构可以只有一个try模块,单可以有多个catch模块
        • catch(...):代表捕获类型未指定,它可以捕获任何类型的异常信息
        • “throw;” 表示"当前try语句不出了这个异常,请上级处理",例如
          • try
          • {
          • throw double(2.0);
          • }
          • catch (double)
          • {
          • throw;
          • cout << "This sentence will not be printed out!" << endl;
          • }
        • 如果throw抛出的语句找不到与之匹配的catch模块,那么系统就会调用terminate函数终止程序。
  3. 在函数声明中进行异常情况指定
    • 为了便于阅读,在声明函数时列出可能抛出的异常情况:

      • double triangle(double, double, double) throw(double);
      • double triangle(double, double, double) throw(int, double, float, char);  // 表示可以抛出四种类型的异常
      • double triangle(double, double, double) throw();  // 声明一个不抛出异常的函数,即使函数内有throw语句也不执行。
  4. 在异常处理中处理析构函数:
    • 在执行try模块过程中发生异常,成员会离开try模块(如果try模块中调用函数,则程序先离开该函数,回到try模块),这样流程就有可能离开该对象的作用于而转到其他函数,因而应当事先做好结束对象前的清理工作。
  5. 举例:
  6. #include <strstream>
    #include <iostream>
    #include <stack>
    using namespace std;int main()
    {void f1();try{f1();}catch(double){cout << "OK0" << endl;}cout << "end0" << endl;return 0;
    }void f1()
    {void f2();try{f2();}catch(char){cout << "OK1" << endl;}cout << "end1" << endl;
    }void f2()
    {void f3();try{f3();}catch(int){cout << "OK2" << endl;}cout << "end2" << endl;
    }void f3()
    {double a = 0;try{throw a;}catch (float)       // 结果OK0 end0
    //    catch (double)    // OK3 end3 end2 end1 end0
        {cout << "OK3" << endl;
    //        throw;    // 将a直接抛出,最后结果 OK3 OK0 end0
        }cout << "end3" << endl;
    }

    View Code

转载于:https://www.cnblogs.com/xumengpiaoyun/p/3554524.html

C++ (14) 异常处理相关推荐

  1. java程序实现按并发数收费_java-实战java高并发程序设计-ch3JDK并发包

    JDK 并发包 3.1 多线程的同步协助:同步控制 3.1.1 synchronized 扩展功能:重入锁 jdk1.5之前重入锁ReentrantLook性能好于synchronized, 但jdk ...

  2. [译] ROS C++ 代码规范

    内容说明 : 文章内容翻译自ROS Wiki,也引用了部分<代码整洁之道>书中的内容. ROS C++代码规范与谷歌C++代码规范有诸多相似之处,本文主要讲述在编写ROS C++代码时需要 ...

  3. Mini 容器学习笔记4——组件的生命周期(应用篇)

    Mini容器支持6中生命周期类型: 1. Singleton :单利类型(缺省组件都是单利类型的生命周期,由容器进行托管的) [Test]public void SingletonLifestyleT ...

  4. python 爬虫 selenium

    Selenium 个人学习笔记 准备工作 一: 安装Chrome浏览器 二: 根据你浏览器的版本号下载 ChromeDriver (笔者的版本号是 76.0.3809.100) ChromeDrive ...

  5. Mini 容器学习笔记6——组件的获取(应用)

    1. 通过组件Id获取组件实例: [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person ...

  6. python基础(文件、异常、模块、类、对象)

    文件: 打开文件使用open函数,open()的第一个参数是:要打开文件的路径,如果只传入文件名那么将在当前文件下查找文件并打开.第二个参数是:文件的打开模式,其他参数都是默认的.文件的打开模式如下图 ...

  7. [转载] python学习笔记

    参考链接: Python | a += b并不总是a = a + b 官网http://www.python.org/ 官网library  http://docs.python.org/librar ...

  8. OASIS协议标准文档的解读_第一部分

    译者注: 利用2022年圣诞假期,终于解读完OASIS标准协议的文档.本翻译文档基于SEMI 草案标准 3626  (2003/04/23).  因为SEMI的原版标准草案涉及到版权的一些问题,并不是 ...

  9. 03-Mono Flux操作

    上一节主要介绍了如何基于Mono和Flux构建一个数据流,Mono是Flux的特例,但大部分API 都是一致的所以重点讲的是Flux.本章将讲Flux和Mono的操作符,如 转换.过滤.异常处理.日志 ...

最新文章

  1. 28岁硕士女程序员想分手!对象专科学历,北京土著,失业3个月找不到工作!遭网友群嘲!...
  2. 复习笔记(五)——C++多态和虚函数
  3. IDC:2015年全球专用备份一体机市场稳健增长
  4. Redis的安装与简单部署
  5. 《人月神话》阅读体会(二)
  6. Spring3向Spring4升级过程中quartz修改
  7. 证明创建runnable实例和普通类时间一样长
  8. 85. Maximal Rectangle
  9. 《零基础》MySQL LIKE 子句(十六)
  10. Hibernate4.3基础知识2
  11. Webwork2之Action Result Type(转载)
  12. 顺丰同城通过港交所聆讯 今年前五个月收入为30.46亿元
  13. 科创板鸣锣开市 一图带你了解首批25家公司
  14. H3C 路由器 与 CISCO 路由器在配置上的差别
  15. 金蝶eas怎么引出凭证_金蝶专业版如何引入引出凭证
  16. 服务器虚拟机声卡无法加载,Esxi虚拟机添加声卡
  17. photoshop cs6 界面字体太小解决方法
  18. 将分类图像转换为ERDAS可识别的专题图像(Continuous to Thematic)
  19. c语言程序0到1000的素数,C语言实现之100-1000以内素数的等差数列
  20. 2021年中国示波器行业及细分产品数字示波器市场现状分析[图]

热门文章

  1. 加载dict_PyTorch 7.保存和加载pytorch模型的两种方法
  2. java 命令 乱码_解决java 命令行乱码的问题
  3. 一看就会的OSPF路由协议综合实验
  4. 分享丨10年DBA老司机整理的Oracle学习路线图
  5. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
  6. unet论文_图像分割之RefineNet 论文笔记
  7. 教你如何用python表白_情人节来了,教你个用 Python 表白的技巧
  8. 中职学校的学生计算机基础较弱,中职学校计算机专业教学的现状分析及对策探究.doc...
  9. 本地服务器模板网站怎么安装,本地服务器怎样安装帝国CMS模版网站
  10. 双目视觉——SGM中的动态规划