异常

  • 编程过程中的常见错误类型

    • 语法错误
    • 逻辑错误
    • 异常

异常是一种在程序运行过程中可能会发生的错误(比如内存不够)

异常如果没有被处理,会导致程序终止。

如果觉得这个操作可能会抛出异常(系统抛出的),就使用try-catch,一旦try里发生异常就转到catch部分

for (int i = 0; i < 99999; i ++) {try {int *p = new int[99999999]; // 可能会内存不够抛出异常} catch(...) { // 写...表示无论try里什么异常都会捕捉cout << "Exception. Memory not enough." << endl;break;}
}
  • 也可以主动抛出异常

    因为有些异常不会被主动抛出,不会导致程序终止。

    int main() {try {int a = 10;int b = 0;int c = a / b;cout << c << endl;} catch (...) {cout << "Exception." << endl;}getchar();return 0;
    }
    

    以上代码执行后不会输出Exception也不会输出c的值,直接闪退。尽管除0是异常操作,但程序并不会抛出异常,这样很危险,因为捕捉不到异常,无法处理异常操作。

    那么系统不抛就自己抛

    int divide(int v1, int v2) {if (v2 == 0) {// throw exceptionthrow 999;}return v1 / v2;
    }int main() {try {int a = 10;int b = 0;cout << divide(a, b) << endl;} catch (int exception) {cout << "Exception:" << exception << endl;}getchar();return 0;
    }
    

    当除数为0的时候抛出异常,可以被catch,然后输出Exception:999.

    如果抛出的异常为字符串,catch异常的类型也要发生变化。

    int divide(int v1, int v2) {if (v2 == 0) {// throw exceptionthrow "不能除以0";}return v1 / v2;
    }int main() {try {int a = 10;int b = 0;cout << divide(a, b) << endl;} catch (const char* exception) {cout << "Exception:" << exception << endl;}getchar();return 0;
    }
    

    输出:Exception:不能除以0

    • try-catch格式:

      可以捕捉不同类型的异常。

    throw异常后,会在当前函数中查找匹配的catch,找不到就终止当前函数代码,去上一层函数中查找。如果最终都找不到匹配的catch,整个程序就会终止。

  • 异常的抛出声明

    为了增强可读性和方便团队协作,如果函数内部可能会抛出异常,建议函数声明一下异常类型.
    表示可能会抛出int类型的异常。

  • 自定义异常类型

    // 所有异常的基类
    class Exception {
    private:
    public:virtual const char *what() const = 0;virtual int code() const = 0;
    };class DivideException: public Exception {const char *what() const {return "不能除以0";}int code() const {return 202; // 举例}
    };class AddException: public Exception {const char *what() const {return "加法有问题";}int code() const {return 303;}
    }int divide(int v1, int v2) {if (v2 == 0) {// throw exceptionthrow DivideException();}return v1 / v2;
    }int main() {try {int a = 10;int b = 0;cout << divide(a, b) << endl;} catch (const Exception &exception) {cout << "DivideException:" << Exception.what() << endl;}getchar();return 0;
    }
    
  • 标准异常(std)


【C++】异常 Exception相关推荐

  1. spring boot 异常(exception)处理

    spring boot 异常(exception)处理 参考文章: (1)spring boot 异常(exception)处理 (2)https://www.cnblogs.com/jinbuqi/ ...

  2. ASP.NET MVC 异常Exception拦截

    ASP.NET MVC 异常Exception拦截 参考文章: (1)ASP.NET MVC 异常Exception拦截 (2)https://www.cnblogs.com/xyb0226/p/92 ...

  3. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException

    Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException 参考文章: (1 ...

  4. Python编程基础:第二十九节 异常Exception

    第二十九节 异常Exception 前言 实践 前言 我们在写代码时不可避免地会出错,这时候编译器便会抛出异常并中断程序的执行.针对这种情况,我们可以采用异常处理的方式捕捉程序中的异常信息,并将异常信 ...

  5. Java中的异常 Exception

    Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...

  6. java异常 子类_Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  7. java经常会出现异常的是,“Java异常Exception”总结

    1. 异常(Exception). 2.Java中的异常分为两大类: a) Checked exception  (非  Runtime Exception) 非运行时异常 b) Unchecked ...

  8. PL/SQL 08 异常 exception

    --PL/SQL错误   编译时   运行时 --运行时的出错处理   EXCEPTION --异常处理块 DECLARE  - BEGIN  - EXCEPTION  WHEN OTHERS THE ...

  9. java exception子类_Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  10. 我的女朋友漏电了–论C++中的失败(failure),缺陷(bug)和异常(exception)

    先做个广告置入,如果喜欢这篇文章,你可以到 zhaoyan.website/blog 去查看于此类似的C/C++文章. 我承认有点标题党了,不过这真的是一篇写软件的文章,所以如果你已经抽出了一张面巾纸 ...

最新文章

  1. Hadoop相关技术
  2. 南邮计算机专硕考研专业课,南京邮电大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  3. table固定表头滚动
  4. win11设置打开闪退怎么办,解决win11系统闪退的问题
  5. java和jsp交互 structs_Struts与jsp+javabean+servlet区别
  6. 家庭记账本开发进度6
  7. C程序设计语言(2)文摘
  8. 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间
  9. CMake 安装与卸载
  10. linux用gzip文件,Linux中的Gzip命令
  11. 华为服务器如何修改ip地址,华为路由器IP地址设置问题-192.168.1.1进不去
  12. 互联网短信网关接口协议(V3.0.0)
  13. rrpp协议如何修改_RRPP配置注意事项
  14. NBUT - 1225~NEW RDSP MODE I(快速幂+倒推)
  15. Ubuntu 20.04 X86成功编译运行wayland、wayland-protocols、weston,亲测有效,踩了很多坑,完美解决。
  16. SHA-1和SHA-2算法有什么区别?
  17. Spring Security OAuth2 实现多人登录互踢下线
  18. 剖析Docker镜像原理
  19. 专题一:欧拉视频放大(线性)------随时间改变放大系数
  20. MATLAB极坐标与xy坐标互相转换_不改变数据形状_极坐标变量v_p(theta,r)的平面图

热门文章

  1. 使用Certbot 生成 https 证书
  2. python写数据库校验_python 验证 sqlite数据库隔离级别
  3. java中常用的定位方式有哪些_java-selenium八种元素定位方式
  4. dseo13b打开自动消失_抖音怎么自动生成字幕?动态字幕有哪几种?
  5. python 中cookie_使用Python分析Cookies
  6. java list 转 map_高并发下的Java数据结构(List、Set、Map、Queue)
  7. mysql 多张表公用一个序列_Mysql--序列3--分库分表策略
  8. java.nio.file.FileSystemException: xxx: Too many open files
  9. mybatis报错解决办法 :Result Maps collection does not contain value for java.lang.String
  10. smartqq java撤回_基于nodejs的http模块通过smartqq实现自动收发qq消息的程序