-
-
[分享]C++基础十七-异常机制
-
发表于: 2021-10-27 12:50 8576
-
程序的错误大致可以分为三种,分别为语法错误、逻辑错误、运行时错误。
1、语法错误:在编译和链接阶段就能发现,只有符合语法规则的代码才能生成可执行程序。语法错误是最容易发现、定位、排除的错误。
2、逻辑错误:代码的逻辑思路有问题,不能够达到最终的目的。逻辑错误可以通过调试解决。
3、运行时错误:程序在运行期间发生的错误,例如除数为零、数组越界、内存分配失败等。运行时错误如果放任不管,系统就会执行默认的操作,终止程序运行,即常见的程序崩溃。C++ 提供了异常机制,能够捕获运行时错误,提供一种转移程序控制权的方式,从而避免程序崩溃,或者至少告诉用户发生了什么再终止程序。
C++ 异常机制涉及到三个关键字:try、catch、throw。
捕获异常的语法为:
try 和catch 都是C++ 中的关键字,后跟语句块,不能省略{ }。try 中包含可能会抛出异常的语句,一旦有异常抛出就会被后面的catch 捕获,如果try 语句块没有异常抛出,那么就不会执行catch 中的语句。
catch 关键字后面的exceptionType variable 指明了当前catch 可以处理的异常类型,以及具体的出错信息。exceptionType 是异常类型,它指明了当前的catch 可以处理什么类型的异常;variable 是一个变量,用来接收异常信息。C++ 规定,异常类型可以是int、char、bool 等基本类型,也可以是指针、数组、字符串、结构体、类等聚合类型。
当程序抛出异常时,会创建一份数据,这份数据包含了错误信息,程序员可以根据这些信息来判断到底出了什么问题,接下来怎么处理。
异常必须显式地抛出,才能被检测和捕获到,如果没有显式的抛出,即使有异常也检测不到。C++ 中使用throw 关键字来显式地抛出异常:
exceptionData 指的是异常数据,可以包含任意的信息,可以是int、bool 等基本类型,也可以是指针、数组、字符串、结构体、类等聚合类型。C++ 语言本身以及标准库中的函数抛出的异常,都是exception 类或其子类的异常,也就是说,抛出异常时,会创建一个 exception 类或其子类的对象。
C++语言本身或者标准库抛出的异常都是exception 的子类,称为标准异常(Standard Exception),exception 类位于<exception>头文件中,可以通过下面的语句来捕获所有的标准异常:
使用引用是为了提高效率,如果不使用引用,就要经历一次对象拷贝(要调用拷贝构造函数)的过程。
/
/
捕获除零异常
#include <iostream>
using namespace std;
double Division(
int
a,
int
b)
{
if
(b
=
=
0
)
{
throw
"Division by zero condition!"
;
}
return
(a
/
b);
}
int
main()
{
int
x
=
9
;
int
y
=
0
;
double z
=
0
;
try
{
z
=
Division(x, y);
cout << z << endl;
}
catch (const char
*
msg) {
cerr << msg << endl;
}
return
0
;
}
/
/
捕获除零异常
#include <iostream>
using namespace std;
double Division(
int
a,
int
b)
{
if
(b
=
=
0
)
{
throw
"Division by zero condition!"
;
}
return
(a
/
b);
}
int
main()
{
int
x
=
9
;
int
y
=
0
;
double z
=
0
;
赞赏
- [分享]C++基础十七-异常机制 8577
- [分享]C++基础十六-模板 8940
- [分享]C++基础十五-运算符重载 8962
- [分享]C++基础十四-抽象类 8676
- [分享]C++基础十三-多态 8476