c++++ 异常处理模式自动模式:使用 try 和 catch 块,处理异常并打印异常信息。手动模式:使用 noexcept 关键字标记函数不抛出异常,提高性能但可能导致未处理异常。

C++ 函数异常处理的自动和手动模式
C++ 提供了处理异常的两种主要模式:自动模式和手动模式。本文将深入探讨这两种模式,并提供实际示例以阐明其用法。
自动模式
立即学习“C++免费学习笔记(深入)”;
自动模式使用关键字 try 和 catch。try 块包含可能引发异常的代码,而 catch 块处理该异常。如果抛出异常,则将执行第一个匹配的 catch 块。如果没有 catch 块可以处理异常,则程序将终止并打印异常信息。
Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例
try {
// 可能引发异常的代码
throw runtime_error("错误!");
} catch (runtime_error& e) {
// 处理 runtime_error 异常
cout << e.what() << endl;
}手动模式
手动模式使用关键字 noexcept 来指定函数是否可能抛出异常。如果函数被标记为 noexcept,则编译器将假设该函数永不抛出异常,并且不会生成处理异常的代码。这可以改善性能,但如果函数确实抛出异常,则可能导致未处理的异常。
int divide(int a, int b) noexcept {
if (b == 0)
throw runtime_error("除数不能为 0");
return a / b;
}实战案例
让我们考虑一个文件读取程序的示例。我们使用自动模式处理读取文件潜在的异常,例如文件不存在。另一方面,我们使用手动模式指定一个函数来计算文件的大小,该函数永不抛出异常。
#include#include void readFile(const string& filename) { try { ifstream file(filename); if (!file.is_open()) throw runtime_error("文件不存在!"); // ... 读取文件内容 ... } catch (runtime_error& e) { cout << e.what() << endl; } } int fileSize(const string& filename) noexcept { ifstream file(filename); file.seekg(0, ios::end); return file.tellg(); } int main() { readFile("text.txt"); cout << "文件大小:" << fileSize("text.txt") << endl; return 0; }
在本例中,readFile 函数使用自动模式处理文件读取的潜在异常。如果文件不存在或无法打开,则会抛出异常并由 catch 块处理。另一方面,fileSize 函数使用手动模式,因为计算文件大小不会抛出异常。









