C++函数异常处理的自动和手动模式

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

C++函数异常处理的自动和手动模式

C++ 函数异常处理的自动和手动模式

C++ 提供了处理异常的两种主要模式:自动模式和手动模式。本文将深入探讨这两种模式,并提供实际示例以阐明其用法。

自动模式

立即学习“C++免费学习笔记(深入)”;

自动模式使用关键字 trycatchtry 块包含可能引发异常的代码,而 catch 块处理该异常。如果抛出异常,则将执行第一个匹配的 catch 块。如果没有 catch 块可以处理异常,则程序将终止并打印异常信息。

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 函数使用手动模式,因为计算文件大小不会抛出异常。

以上就是C++函数异常处理的自动和手动模式的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1460097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 12:07:09
下一篇 2025年12月18日 12:07:37

相关推荐

发表回复

登录后才能评论
关注微信