C++中异常处理通过try-catch捕获throw抛出的错误,使用标准异常类如std::runtime_error可提升程序健壮性,建议按引用捕获以避免切片。

在C++中,异常处理是一种用于应对程序运行时错误的机制,比如数组越界、内存分配失败或文件无法打开等。通过 try-catch 结构,程序可以在出错时优雅地处理问题,而不是直接崩溃。
基本语法:try-catch结构
使用 try-catch 可以捕获并处理异常。基本结构如下:
try {
// 可能抛出异常的代码
} catch (异常类型1 变量名) {
// 处理特定类型的异常
} catch (异常类型2 变量名) {
// 处理另一种异常
} catch (...) {
// 捕获所有其他未处理的异常(通配符)
}
当 try 块中的代码使用 throw 抛出一个值时,程序会查找匹配的 catch 块来处理这个异常。
抛出异常:使用 throw
你可以使用 throw 关键字手动抛出异常,抛出的内容可以是整数、字符串、对象等。
立即学习“C++免费学习笔记(深入)”;
if (分母 == 0) {
throw "除数不能为零!";
}
这个异常可以在外层用 catch 捕获。
捕获标准异常:推荐使用 std::exception 子类
C++ 标准库定义了一系列异常类,位于
- std::runtime_error:运行时错误
- std::invalid_argument:无效参数
- std::out_of_range:超出范围,如访问 vector 越界
示例代码:
#include#include using namespace std; int main() { try { throw invalid_argument("参数错误!"); } catch (const invalid_argument& e) { cout << "捕获到参数异常: " << e.what() << endl; } catch (const exception& e) { cout << "捕获到标准异常: " << e.what() << endl; } catch (...) { cout << "捕获到未知异常" << endl; } return 0; }
注意:建议按引用捕获(如 const exception&),避免对象切片和额外拷贝。
实际应用场景举例
比如在进行除法运算时防止除零:
double divide(int a, int b) {
if (b == 0) {
throw runtime_error("除零错误!");
}
return static_cast(a) / b;
}
int main() {
try {
double result = divide(10, 0);
} catch (const exception& e) {
cout << "错误: " << e.what() << endl;
}
return 0;
}
这样程序不会崩溃,而是输出错误信息并继续执行后续逻辑。
基本上就这些。掌握 try-catch 和 throw 的配合使用,能让你的 C++ 程序更健壮、更安全。不复杂但容易忽略。











