pdf文档 Noexcept: Enabling Testing of Contract Checks

1.38 MB 90 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
这篇文档讨论了C++中的noexcept特性及其对合同检查和单元测试的影响。noexcept指定函数不抛出异常,改善了生产构建的代码大小、增强了诊断功能,并在高可用系统中提供了恢复能力。文档强调了编写和运行时检查函数合同的重要性,以及如何单元测试合同检查注释(CCAs)。最佳实践包括在默认构造函数、移动操作和具有宽合同的平凡函数上使用noexcept,但避免在窄合同函数上使用。文档还探讨了noexcept与单元测试的互动,并提出了改进建议。
AI总结
这篇文章主要探讨了C++语言中的`noexcept`关键字在合约检查和测试中的应用及最佳实践,重点包括以下内容: --- ### 核心内容总结 1. **`noexcept`关键字的作用**: - 用于表示函数不会抛出异常,告诉调用者无需处理异常。 - 可用于默认构造函数、移动构造函数、移动操作以及具有宽合约的微小函数。 - 应当谨慎使用,仅在可能优化算法或实现强异常安全保证时使用。 2. **合约检查与测试的重要性**: - 合约检查(Contract Checks)用于验证函数前置条件、后置条件等。 - 合约检查本身可能存在错误,需通过单元测试验证。 - 过度使用`noexcept`会干扰合约检查的单元测试。 3. **`noexcept`与单元测试的关系**: - `noexcept`可能阻碍对合约检查代码的测试。 - 避免在具有狭窄合约的函数上使用`noexcept`,遵循Lakos规则。 4. **最佳实践**: - 明确函数合约,即使无法在代码中检查。 - 尽可能检查前置条件。 - 对合约检查代码进行单元测试。 - 最小化`noexcept`的使用,仅在特定场景(如默认构造函数和移动操作)中使用。 5. **`noexcept`的限制与风险**: - 如果`noexcept`函数抛出异常,行为未定义,可能导致程序终止。 - 不适用于狭窄合约函数。 --- ### 总结 文章强调了合约检查的重要性,并提出了如何正确使用`noexcept`以平衡代码的异常处理和测试需求。通过遵循最佳实践,可以在保证高可用性和代码优化的同时,避免`noexcept`带来的潜在问题。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 78 页请下载阅读 -
文档评分
请文明评论,理性发言.