C++中try-catch用于捕获异常提升程序健壮性,try块放置可能出错代码,throw抛出异常,catch按类型匹配处理,支持多类型捕获且需从具体到一般排列,结合RAII确保资源安全。

在C++中,try-catch 机制是处理程序运行时异常的核心方式。它允许程序在出现错误时进行捕获并做出相应处理,而不是直接崩溃。合理使用 try-catch 可以提升代码的健壮性和可维护性。
try-catch 的基本形式如下:
try {
// 可能抛出异常的代码
} catch (异常类型1 变量名) {
// 处理特定类型的异常
} catch (异常类型2 变量名) {
// 处理另一种异常
} catch (...) {
// 捕获所有未被前面 catch 捕获的异常
}
try 块中放置可能抛出异常的代码。一旦其中某条语句抛出异常,程序会立即跳转到与该异常类型匹配的 catch 块执行。
C++ 使用 throw 关键字抛出异常。可以抛出基本类型(如 int、char),也可以抛出对象,最常见的是标准库中的 std::exception 或其派生类。
立即学习“C++免费学习笔记(深入)”;
示例:
#include <iostream>
#include <stdexcept>
<p>int divide(int a, int b) {
if (b == 0) {
throw std::invalid_argument("除数不能为零");
}
return a / b;
}</p><p>int main() {
try {
int result = divide(10, 0);
std::cout << "结果:" << result << std::endl;
} catch (const std::invalid_argument& e) {
std::cout << "捕获异常:" << e.what() << std::endl;
}
return 0;
}</p>上面代码中,当 b 为 0 时,函数 throw 一个 std::invalid_argument 异常。main 函数中的 catch 块通过引用捕获该异常,并调用 what() 方法输出错误信息。
一个 try 块可以对应多个 catch 块,用于处理不同类型的异常。匹配顺序从上到下,因此更具体的异常类型应放在前面。
例如:
try {
// 可能抛出 int、double 或自定义异常
throw std::runtime_error("运行时错误");
} catch (const std::runtime_error& e) {
std::cout << "运行时错误:" << e.what() << std::endl;
} catch (const std::exception& e) {
std::cout << "标准异常:" << e.what() << std::endl;
} catch (...) {
std::cout << "未知异常" << std::endl;
}
注意:如果先写 catch(const std::exception&),再写更具体的子类,编译器可能会警告不可达代码。
使用 try-catch 时需注意资源泄漏问题。推荐结合 RAII(Resource Acquisition Is Initialization)机制,即利用对象的构造函数获取资源,析构函数自动释放。
例如:
class FileHandler {
FILE* fp;
public:
FileHandler(const char* filename) {
fp = fopen(filename, "r");
if (!fp) throw std::runtime_error("无法打开文件");
}
~FileHandler() {
if (fp) fclose(fp);
}
// ...
};
即使在构造函数中抛出异常,局部对象的析构仍会被调用,确保文件不会泄漏。
基本上就这些。try-catch 不复杂但容易忽略细节,关键是抛出合适的异常类型,并在合适层级捕获处理。
以上就是c++++中try-catch如何使用_C++异常捕获与错误处理的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号