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 页请下载阅读 -
文档评分