导航菜单

C++编程/异常处理
课程进度 80% · 第15/18章15/18章 · 标签 1/3
1

try-catch 语句

使用 try-catch 块捕获和处理异常,将错误处理与正常逻辑分离。

cpp
1
#include <iostream>
2
#include <stdexcept>
3
using namespace std;
4
 
5
double divide(double a, double b) {
6
if (b == 0) {
7
throw runtime_error("除数不能为零!");
8
}
9
return a / b;
10
}
11
 
12
int main() {
13
try {
14
cout << divide(10, 2) << endl; // 正常执行
15
cout << divide(10, 0) << endl; // 抛出异常
16
}
17
catch (const runtime_error& e) {
18
cerr << "捕获到运行时错误: " << e.what() << endl;
19
}
20
catch (const exception& e) {
21
cerr << "捕获到标准异常: " << e.what() << endl;
22
}
23
catch (...) {
24
cerr << "捕获到未知异常" << endl;
25
}
26
 
27
cout << "程序继续执行..." << endl;
28
return 0;
29
}

📖异常处理将错误处理代码与正常业务逻辑分离,可在调用栈中传播,支持不同类型的异常处理

2

标准异常层次

C++ 标准库提供了一套完整的异常类层次结构:

exception
├── bad_alloc
├── bad_cast
├── bad_typeid
├── logic_error
├── invalid_argument
├── domain_error
├── length_error
└── out_of_range
└── runtime_error
├── range_error
├── overflow_error
└── underflow_error

📖建议按引用捕获异常(catch by reference),避免对象切割问题