首页
社区
课程
招聘
[分享]C++基础十七-异常机制
发表于: 2021-10-27 12:50 8576

[分享]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;

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//