CppCoreGuidelines I.6 用 Expects() 表达前置条件
18 March 2022
I.6: Prefer Expects() for expressing preconditions
理由
可以明确前置条件,可以通过某些外部工具进行检查确保。
例子
int area(int height, int width) { Expects(height > 0 && width > 0); // good // ... }
int area(int height, int width) { if (height <= 0 || width <= 0) my_error(); // obscure // ... }
注意
前置条件可以通过多种方式声明:注释、 if
条件语句、assert()
断言。然而,这些方式要么很难和普通代码区分开,要么很难更新,要么很难让工具处理,而且可能语义上是错的。(你希望在 debug 模式下总是中断程序进行检查?然后在实际生产环境不做检查?)
注意
前置条件应该是接口的一部分,而不是实现的一部分。但是C++语言目前还不支持。一旦语言支持,核心指南会引入标准的前置条件、后置条件与断言判断。
注意
Expects()
也可以在算法过程中,检查条件是否满足。
注意
不建议用无符号型数据来确保传入的数据非负。
强化
- 目前语言层面还不支持,请检查
assert()
判断是否合理。