C++笔记之程序员应主动添加noexcept说明符的场景汇总

📅 2026/8/2 17:03:24 👁️ 阅读次数 📝 编程学习
C++笔记之程序员应主动添加noexcept说明符的场景汇总

C++笔记之程序员应主动添加noexcept说明符的场景汇总


code review!

文章目录

  • C++笔记之程序员应主动添加noexcept说明符的场景汇总
    • 1. 移动构造函数 / 移动赋值运算符(最高频)
    • 2. swap 函数
    • 3. 析构函数(通常不需手动加,但特殊情况需注意)
    • 4. 内存释放相关函数:operator delete / operator delete[]
    • 5. 简单的 Getter / 查询类成员函数
    • 6. 自定义分配器(Allocator)的关键接口
    • 7. 哈希函数 std::hash 特化
    • 8. 移动语义相关的构造函数整体链条
    • 9. 线程相关:线程函数、信号处理函数
    • 10. 与 C 交互的接口 / extern "C" 函数
    • 11. 总结口诀(面试可直接背)
    • 12. 面试高频追问 & 答案要点
    • 13. 移动构造函数 noexcept 辨析
      • 13.1 责任划分:程序员的承诺与 STL 的决策
        • 13.1.1 程序员的责任(主动行为)
        • 13.1.2 STL 的决策(被动行为)
        • 13.1.3 完整协作流程
      • 13.2 为什么必须加 noexcept
        • 13.2.1 强异常安全保证机制
        • 13.2.2 性能影响
        • 13.2.3 代码示例
      • 13.3 不能加 noexcept 的场景与后果
        • 13.3.1 运行期崩溃风险
        • 13.3.2 契约精神
      • 13.4 工程实践建议
      • 13.5 总结

1. 移动构造函数 / 移动赋值运算符(最高频)

最重要的场景。若移动构造函数保证不抛异常,必须显式标记noexcept,否则std::vector等容器扩容时不会使用移动,而是退化为拷贝,白白损失性能。

classWidget{public:Widget(Widget&&other)noexcept;// 必须加Wid