首页 > 后端开发 > C++ > 正文

C++11引入的异常处理改进有哪些 noexcept和异常指针特性

P粉602998670
发布: 2025-07-03 08:43:01
原创
949人浏览过

c++++11在异常处理方面引入了noexcept和exception_ptr两个重要特性。① noexcept用于声明函数不抛出异常,语法更简洁且带来性能优化,若函数实际抛出异常则调用std::terminate终止程序;② exception_ptr用于捕获并传递异常,尤其适用于多线程或异步操作中将异常从一个上下文转移到另一个上下文处理。两者用途不同,前者明确接口行为,后者支持异常传递,是互补的工具

C++11引入的异常处理改进有哪些 noexcept和异常指针特性

C++11在异常处理方面做了不少改进,其中两个比较重要的特性就是noexcept和“异常指针(exception_ptr)”。这些改动让开发者能更清晰地表达函数是否抛出异常,并提供了更强的异常传递能力。

C++11引入的异常处理改进有哪些 noexcept和异常指针特性

noexcept:明确声明函数不抛异常

以前我们用throw()来声明一个函数不会抛出任何异常,但在C++11中推荐使用noexcept替代。它不仅语法更简洁,还能带来一定的性能优化。

C++11引入的异常处理改进有哪些 noexcept和异常指针特性

比如:

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

void func() noexcept;
登录后复制

这表示func()不会抛出异常。如果它真的抛了,程序会直接调用std::terminate()终止运行。

C++11引入的异常处理改进有哪些 noexcept和异常指针特性

好处有几个:

  • 更高效的代码生成:编译器知道这个函数不会抛异常,就可以省去一些异常处理的开销。
  • 接口语义更清晰:调用者可以放心地认为该函数不会中断流程。
  • STL容器操作中也广泛使用了noexcept,用于判断某些操作是否安全。
小贴士:如果你不确定函数是否会抛异常,就不要随便加noexcept。否则一旦抛了异常,后果很严重。

异常指针 exception_ptr:把异常从一个线程传到另一个线程

C++11引入了std::exception_ptr类型,允许你捕获当前的异常并保存下来,之后再在别的地方重新抛出。这对于多线程环境下处理异常非常有用。

图改改
图改改

在线修改图片文字

图改改 455
查看详情 图改改

举个简单的例子:

#include <exception>
#include <iostream>

void handle_exception(std::exception_ptr eptr) {
    try {
        if (eptr) {
            std::rethrow_exception(eptr); // 重新抛出异常
        }
    } catch (const std::exception& e) {
        std::cout << "Caught: " << e.what() << std::endl;
    }
}

int main() {
    std::exception_ptr eptr;

    try {
        throw std::runtime_error("Oops!");
    } catch (...) {
        eptr = std::current_exception(); // 捕获当前异常
    }

    handle_exception(eptr); // 在其他上下文中处理
}
登录后复制

这段代码展示了如何在一个地方捕获异常,然后在另一个地方重新抛出。对于异步任务或线程池来说,这种机制非常实用。

几个关键点需要注意:

  • std::current_exception()会复制当前异常对象,所以要确保异常类型是可复制的。
  • 使用完exception_ptr后最好检查是否为nullptr,避免误用。
  • 重新抛出时要用try/catch包裹,否则可能造成程序崩溃。

如何选择使用 noexcept 和 exception_ptr?

这两个特性虽然都属于异常处理体系,但用途不同:

  • 如果你想明确告诉别人(以及编译器)某个函数不会抛异常,就用noexcept
  • 如果你在做跨线程、异步操作,需要传递异常信息,那就考虑使用exception_ptr

它们并不是互相替代的关系,而是互补的工具。


基本上就这些。理解这两个特性的应用场景,能让你写出更健壮、更现代的C++代码。

以上就是C++11引入的异常处理改进有哪些 noexcept和异常指针特性的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号