C++ 异常处理

  • C++ 内置了异常处理的语法元素 try ... catch ...

    • try 语句处理正常逻辑代码
    • catch 语句处理异常逻辑代码
    • try 语句中的异常由对应的 catch 语句处理
try
{double r = divide(1, 0);
}
catch(...)
{cout << "Divided by zero ..." << endl;
}
  • C++ 通过 throw 语句抛出异常
double divide(double a, double b)
{const double delta = 0.0000000000001;double ret = 0;if( !((-delta < b) && (b < delta)) ){ret = a / b;}else{throw 0;        // 产生除 0 异常}return ret;
}
  • C++ 异常处理分析

    • throw 抛出的异常必须被 catch 处理

      • 当前函数能够处理异常,程序继续向下运行
      • 当前函数无法处理异常,则函数停止执行,并返回

未被处理的异常会沿着函数调用栈向上传播,直到被处理为止,否则程序将停止运行

编程实验: C++ 异常处理初探

#include <iostream>
#include <string>
using namespace std;double divide(double a, double b)
{const double delta = 0.00000000000001;double ret = 0;if( !((-delta < b) && (b < delta)) ){ret = a / b;}else{throw 0;}return ret;
}int main()
{try{double r = divide(1, 0);cout << "r = " << r << endl;}catch(...){cout << "Divided by zero ..." << endl;}return 0;
}
输出:
Divided by zero ...
  • 同一个 try 语句可以跟上多个 catch 语句

    • catch 语句可以定义具体处理的异常类型
    • 不同类型的异常由不同的 catch 语句负责处理
    • try 语句中可以抛出任何类型的异常
    • catch(...) 用于处理所有类型的异常
    • 任何异常都只能被捕获 (catch) 一次

  • 异常处理的匹配规则

编程实验: 异常类型匹配

#include <iostream>
#include <string>
using namespace std;void Demo1()
{try{throw 'c';}catch(short c){cout << "catch(short c)" << endl;}catch(int c){cout << "catch(int c)" << endl;}catch(char c){cout << "catch(char c)" << endl;}catch(...){cout << "catch(...)" << endl;}
}void Demo2()
{throw "D.T.Software";
}int main()
{Demo1();try{Demo2();}catch(char* s){cout << "catch(char* s)" << endl;}catch(const char* cs){cout << "catch(const char* cs)" << endl;}catch(string ss){cout << "catch(string ss)" << endl;}catch(...){cout << "..." << endl;}return 0;
}
输出:
catch(char c)
catch(const char* cs)

小结

  • C++ 中直接支持异常处理的概念
  • try ... catch ... 是 C++ 中异常处理的专用语句
  • try 语句处理正常逻辑代码,catch 语句处理异常情况
  • 同一个 try 语句可以跟上多个 catch 语句
  • 异常处理必须严格匹配,不进行任何的类型转换

以上内容参考狄泰软件学院系列课程,请大家保护原创

【C++】 64_C++中的异常处理 (上)相关推荐

  1. java异常处理怎么加_带你了解Java中的异常处理(上)

    当当当当当当,各位看官,好久不见,甚是想念. 今天我们来聊聊Java里的一个小妖精,那就是异常. 什么是异常?什么是异常处理? 异常嘛,顾名思义就是不正常,(逃),是Java程序运行时,发生的预料之外 ...

  2. 关于C#中async/await中的异常处理(上)

    关于C#中async/await中的异常处理(上) 参考文章: (1)关于C#中async/await中的异常处理(上) (2)https://www.cnblogs.com/sunjie9606/p ...

  3. Visual C++中的异常处理浅析(上)

    Visual C++中的异常处理浅析 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] Visual C++提供了对C语言.C++语言及MFC的支持,因而其 ...

  4. java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】...

    第1章 响应数据和结果视图 1.1返回值分类 1.1.1 字符串 1.1.2 void 1.1.3 ModelAndView 1.2转发和重定向 1.2.1 forward 转发 1.2.2 Redi ...

  5. kotlin中的异常处理_如何使用assertFailsWith在Kotlin中测试异常

    kotlin中的异常处理 by Daniel Newton 丹尼尔·牛顿 如何使用assertFailsWith在Kotlin中测试异常 (How to test exceptions in Kotl ...

  6. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)

    PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...

  7. Swift41/90Days - 面向轨道编程 - Swift 中的异常处理

    问题 在开发过程中,异常处理算是比较常见的问题了. 举一个比较常见的例子:用户修改注册的邮箱,大概分为以下几个步骤: 接收到一个用户的请求:我要修改邮箱地址 验证一下请求是否合法,将请求进行格式转化 ...

  8. Arm64中的异常处理

    闲话 最近优化环境中出现了多次不同种类的异常,其他文章中也有提及,为此专门去研究了一下Arm64的异常处理机制和代码,之前主要的开发和应用环境为X86,ARM接触很少,也没有机会去研究和学习,总以为不 ...

  9. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...

最新文章

  1. Buffer和Cache的区别
  2. CSS样式:position: absolute
  3. STP、RSTP、MSTP
  4. ORACLE TEXT DATASTORE PREFERENCE(六)
  5. python约瑟夫环_Python实现约瑟夫环问题的方法
  6. JQuery:deferred对象的方法
  7. WPF应用程序内存泄漏的一些原因
  8. cocos2dx 3.x 解决输入框(TextField,TextFieldTTF) 输入中文变乱码的问题
  9. matlab接口与编程,精通MATLAB接口与编程
  10. 不学无数——适配器模式
  11. 3. 逻辑漏洞之支付漏洞
  12. springcloud-gateway路由配置和跨域配置
  13. C#反射(Reflection)对类的属性get或set值
  14. 惠普台式电脑引导不了系统_惠普电脑装完系统怎么硬盘启动不了怎么办
  15. 性能和稳定性测试报告模板
  16. FANUC机器人外部电缆连接示意图(一)
  17. FFmpeg音视频倍速控制
  18. 串口,使用交叉还是直连串口线
  19. qla2xxx 0000:04:00.0: scsi(1:0:2): Abort command issued -- 1 1b22e 2002.
  20. 分享72个商务商城PHP源码,总有一款适合你

热门文章

  1. Redis源码试读(一)源码准备
  2. 整合大数据价值最大化的三个关键因素
  3. DialogInterface.OnClickListener()和android.view.View.OnClickListener冲突问题
  4. LVS+keepalived 实现高可用与负载均衡实施方案
  5. Apache Libcloud 0.12.3 发布
  6. VTK与Qt整合的示例
  7. 程序员的爱情 第六章
  8. JetBrains 2018 中国开发者生态报告:Java 最流行
  9. python日期时间
  10. 元素均匀排列自动换行二维数组前端遍历