C++笔记之程序员应主动添加noexcept说明符的场景汇总
📅 2026/8/2 17:03:24
👁️ 阅读次数
📝 编程学习
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
编程学习
技术分享
实战经验