C++中的异常处理与错误处理

本文最后更新于:2023年9月17日 晚上

标题:C++中的异常处理与错误处理

简介:
异常处理是在程序运行时发生错误时采取的一种机制,它允许程序在异常发生时进行相应的处理,而不是直接导致程序崩溃。

正文:

1. 异常的基本概念

在C++中,异常是一种程序运行时错误的信号,它可以是一个对象、一个基本数据类型或者一个指针。

1
2
3
4
5
try {
// 可能抛出异常的代码
} catch (ExceptionType& e) {
// 处理异常的代码
}

2. 异常的抛出

可以使用throw关键字抛出异常。通常情况下,抛出的是一个异常对象。

1
2
3
4
5
void myFunction() {
if (/* 发生错误的条件 */) {
throw MyException("发生错误");
}
}

3. 异常的捕获

异常的捕获由try块和相应的catch块组成。当try块中的代码发生异常时,控制权会转移到与异常类型匹配的catch块中。

1
2
3
4
5
try {
myFunction();
} catch (MyException& e) {
// 处理异常的代码
}

4. 异常类型的继承关系

异常可以通过继承的方式建立类型的层次结构,从而使得我们可以通过基类的catch块来捕获派生类的异常。

1
2
3
4
5
6
7
8
9
10
class BaseException {};
class DerivedException : public BaseException {};

try {
if (/* 发生DerivedException条件 */) {
throw DerivedException();
}
} catch (BaseException& e) {
// 可以捕获BaseException及其派生类的异常
}

5. 使用标准异常

C++标准库提供了一些标准异常类,它们继承自std::exception类,可以用来处理各种常见的异常情况。

1
2
3
4
5
6
7
try {
if (/* 发生标准异常条件 */) {
throw std::runtime_error("发生运行时错误");
}
} catch (const std::exception& e) {
std::cout << "捕获到异常:" << e.what() << std::endl;
}

6. 自定义异常类

可以通过继承std::exception类来定义自己的异常类,从而实现对特定异常的处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyException : public std::exception {
public:
MyException(const char* message) : message(message) {}

virtual const char* what() const throw() {
return message.c_str();
}

private:
std::string message;
};

try {
if (/* 发生自定义异常条件 */) {
throw MyException("发生自定义异常");
}
} catch (const MyException& e) {
std::cout << "捕获到自定义异常:" << e.what() << std::endl;
}

结论:

异常处理是C++中重要的错误处理机制,它允许程序在发生错误时进行相应的处理,而不是直接导致程序崩溃。通过try-catch块可以捕获异常并进行相应的处理,同时也可以定义自己的异常类来处理特定的异常情况。


C++中的异常处理与错误处理
https://jinbilianshao.github.io/2023/09/17/C-中的异常处理与错误处理/
作者
连思鑫
发布于
2023年9月17日
许可协议