18 March 2022

C++ 核心指南目录

理由:

可以明确前置条件,可以引入工具支持。

比如:

int area(int height, int width)
{
    Expects(height > 0 && width > 0);            // good
    if (height <= 0 || width <= 0) my_error();   // obscure
    // ...
}

注意事项:

前置条件可以通过多种方式声明:注释、if 条件语句、 assert() 断言。然而,这些方式要么很难和普通代码区分开,要么很难更新,要么很难让工具处理,而且可能语义上是错的。(debug 模式下总是中断?生产环境不做检查?)

注意事项:

前置条件应该是接口的一部分,而不是实现的一部分。但是 C++ 语言目前还不支持。一旦语言支持,核心指南会引入标准的前置条件、后置条件与断言判断。

注意事项:

Expects() 也可以在算法过程中,检查条件是否满足。

注意事项:

不建议用无符号型数据来确保传入的数据非负。

强化措施:

  • 目前语言层面还不支持,请检查 assert() 判断是否合理。