C++异常处理全攻略:try/catch/throw机制、标准异常体系与自定义异常
异常:程序运行期出现的问题(如除零)。C++异常处理基于三关键字:try、catch、throw。
throw:问题出现时抛出异常。catch:在期望处理处捕获异常。try:标识需保护的代码块,后跟一个或多个catch块。
语法:
try { // 受保护代码 }
catch(ExceptionName e1) { /* 处理e1 */ }
catch(ExceptionName e2) { /* 处理e2 */ }
catch(ExceptionName eN) { /* 处理eN */ }
可列多个catch匹配不同异常类型。
抛出异常
任意代码处用throw抛出,操作数类型决定异常类型。除零示例:
double division(int a, int b) {
if(b == 0) throw "Division by zero condition!";
return a/b;
}
捕获异常
catch声明指定捕获类型:
try { /* protected */ }
catch(ExceptionName e) { /* 处理ExceptionName */ }
捕获任意类型异常用省略号:
try { /* protected */ }
catch(...) { /* 处理任意异常 */ }
完整除零捕获演示:
#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 = 50, y = 0; double z = 0;
try {
z = division(x, y);
cout << z << endl;
} catch(const char* msg) { // 匹配const char*类型
cerr << msg << endl;
}
return 0;
}
输出:Division by zero condition!
C++标准异常体系(定义于<exception>)
继承层级:
| 序号 | 异常与说明 |
|---|---|
| 1 | std::exception 所有标准异常基类。 |
| 2 | std::bad_alloc
|
| 3 | std::bad_cast
|
| 4 | std::bad_exception 处理意外异常的装置。 |
| 5 | std::bad_typeid
|
| 6 | std::logic_error 理论上读代码可检测的逻辑错误基类。 |
| 7 | std::domain_error 数学定义域无效。 |
| 8 | std::invalid_argument 无效参数。 |
| 9 | std::length_error 过长 |
| 10 | std::out_of_range 越界访问(如 |
| 11 | std::runtime_error 理论上读代码无法检测的运行时错误基类。 |
| 12 | std::overflow_error 数学上溢。 |
| 13 | std::range_error 存储值超出范围。 |
| 14 | std::underflow_error 数学下溢。 |
自定义异常
继承std::exception重写what():
#include <iostream>
#include <exception>
using namespace std;
struct MyException : public exception {
const char* what() const throw() { return "C++ Exception"; }
};
int main() {
try { throw MyException(); }
catch(MyException& e) {
cout << "MyException caught" << endl;
cout << e.what() << endl;
}
catch(exception& e) { /* 其他标准异常 */ }
return 0;
}
输出:MyException caught / C++ Exception。what()是异常类公共虚函数,所有派生类覆盖以返回错误原因。
C语言
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- C++ 类模板实战指南:编写灵活的类型无关代码
- C语言文件处理完全指南:fopen、fprintf、fread 与 fseek
- C++ 异常处理实战:try、catch、throw 完整指南与示例
- C 语言错误处理最佳实践:errno、perror 与 strerror 详解
- C++编程语言:核心特性全景解析
- C++常量与字面量完全手册:类型、语法与最佳实践
- C++运算符大全:算术/关系/逻辑/位/赋值/杂项与优先级结合性
- C++数值类型实战指南:基本类型、数学函数与随机数生成
- 精通 Python 异常处理:try、except、finally 与 raise 高效用法
- 精通 Java 异常处理:try-catch、finally、throw 与 throws 详解