0%

C++异常处理

异常处理是一种在程序执行期间处理错误或异常情况的机制,它允许程序在发生错误时转移到错误处理代码,从而提高程序的健壮性和可靠性。在 C++ 中,异常处理通过 trythrowcatch 关键字来实现。

  1. try: 用于包含可能会引发异常的代码。程序在执行 try 块中的代码时,如果发生异常,将会跳转到匹配的 catch 块进行异常处理。try 块必须和至少一个 catch 块配对使用。
  2. throw: 用于在程序中手动抛出异常。它可以抛出任何类型的异常,包括基本数据类型、类对象、指针等。当程序执行到 throw 语句时,会立即跳转到匹配的 catch 块中,并执行相应的异常处理代码。
  3. catch:用于捕获并处理 try 块中抛出的异常。catch 块必须紧跟在 try 块之后,用于处理特定类型的异常或者所有类型的异常。catch 块中可以使用异常类型来捕获特定类型的异常,也可以使用省略号 ... 来捕获所有类型的异常。一个 try 块可以有多个 catch 块,每个 catch 块可以捕获不同类型的异常,但只有第一个匹配的 catch 块会被执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>

void processNumber(int num) {
if (num == 0) {
throw "Divide by zero exception";
} else if (num < 0) {
throw std::runtime_error("Negative number exception");
} else {
std::cout << "Result: " << 100 / num << std::endl;
}
}

int main() {
try {
processNumber(0);
} catch (const char* msg) {//捕获自定义的异常
std::cerr << "Caught exception: " << msg << std::endl;
} catch (const std::exception& e) {//捕获到任何继承自std::exception的异常,并使用 e.what()方法获取异常对象的描述信息
std::cerr << "Caught exception: " << e.what() << std::endl;
}

try {
processNumber(-5);
} catch (const char* msg) {
std::cerr << "Caught exception: " << msg << std::endl;
} catch (const std::exception& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}

try {
processNumber(10);
} catch (const char* msg) {
std::cerr << "Caught exception: " << msg << std::endl;
} catch (const std::exception& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}

return 0;
}

//运行结果
//Caught exception: Divide by zero exception
//Caught exception: Negative number exception
//Result: 10