异常处理

Posted liugangjiayou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。

异常机制 计算机计算的时候遇到除法 除数都是0的情况

     文件打开失败

     申请对内存的时候失败

异常运行的时候遇到的问题 不是代码的问题

             c语言通过返回值做异常处理

             异常遇到之后 提交给调用方进行

处理方式 try 测试代码

    catch捕获异常

    throw抛出异常

有遇到异常直接利用throw进行抛出 交给外部的catch进行捕获 如果处理不了或者捕获不到交给上级

往上级的try里面找 如果依然找不到 调用abort中断这个程序

举出一些异常的例子:

fopen 文件打开失败 能否在fopen里处理这个异常

标准异常类  exception

bad_alloc new内存申请太多 导致申请失败

out_of_range 越界string字符串越界

typeid 可以得到类型

在多态中 父类执政如果指向null 使用typeid就汇报 bad_typeid

 1 #include<iostream>
 2 
 3 
 4 using namespace std;
 5 //文件对象  fstream+成员函数
 6 //c语言  文件指针+函数
 7 
 8 void fun(int x, int y)
 9 
10     if (y == 0)
11     
12         throw"被除数为0";    //throw后面的异常可以是任意类型
13     
14     cout << x / y << endl;
15 
16 int main()
17 
18     float num;
19     cout << typeid(num).name() << endl;
20 //如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算
21     /*
22     int *p=new int[0xfffffff];
23     int *p1=new int[0xfffffff]; bad_alloc内存申请过多异常
24     int *p2=new int[0xfffffff];
25     int *p3=new int[0xfffffff];
26     delete[] p;
27     delete[] p1;
28     delete[] p2;
29     delete[] p3;
30 
31     string str("hello");
32     str.at(8);out_off_range 越界—(c没有越界检查)
33     
34     */
35     int x, y;
36     try
37     
38         //求两个数字相除
39         cin >> x >> y;
40         fun(x, y);
41     
42     catch (int x)//捕获int类型的异常
43     
44 
45     
46     catch (char x)//捕获char类型的异常
47     
48 
49     
50     catch (char* str)//捕获字符串类型的异常
51     
52         cout << str << endl;
53         cout << "请重新输入" << endl;
54         cin >> y;
55         fun(x,y);
56     
57     catch (...)//捕获任意类型的异常
58     
59 
60     
61 

 

以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

java异常处理详解!!

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

异常处理,约束,MD5加密,日志处理

PHP异常处理

Java的异常处理语法