发布于2026-07-21 阅读(0)
扫一扫,手机访问
在Linux环境下用C++做异常处理,其实核心就靠三个关键字:try、catch和throw。别看它们简单,用好了能让代码健壮不少。下面先看一个最基础的例子:

#include
#include
int main() {
try {
int a = 10;
int b = 0;
if (b == 0) {
throw std::runtime_error("除数不能为0");
}
int result = a / b;
std::cout << "结果是:" << result << std::endl;
} catch (const std::exception& e) {
std::cerr << "捕获到异常:" << e.what() << std::endl;
}
return 0;
}
这段代码里,try块圈出了一段可能出问题的逻辑——检测除数为0,一旦发现就用throw抛出一个std::runtime_error异常,并附上错误信息。然后catch语句负责接住它,这里捕获的是所有继承自std::exception的异常类型,通过e.what()拿到描述信息并处理。
关键点在于:throw必须在try块内部才能被捕获,如果跑到外面抛异常,程序直接崩溃。所以写代码时一定要把可能出岔子的逻辑包在try里。
实际项目中,不同类型的异常需要分开处理,这时候可以堆叠多个catch语句:
try {
// ...
} catch (const std::runtime_error& e) {
// 处理运行时错误
} catch (const std::logic_error& e) {
// 处理逻辑错误
} catch (const std::exception& e) {
// 处理其他标准异常
} catch (...) {
// 处理未知异常
}
这样写的好处是,每个异常类型都能得到精准的应对策略。最后那个catch(...)是个万能兜底,但一般不建议滥用,容易掩盖真正的问题。
另外,异常处理最头疼的往往是资源泄漏——比如文件没关、内存没释放。好在C++有RAII(Resource Acquisition Is Initialization)这个利器,简单说就是让资源的生命周期和某个对象的生命周期绑定,对象一销毁,资源自动释放。实践中多用智能指针(std::unique_ptr、std::shared_ptr)或者自定义资源管理类,就能规避大部分资源泄漏隐患。这比手动到处写try-catch去释放资源要优雅得多。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8