功能说明

时间:2010-11-22 11:31:31

标签: c++ preconditions

如果我有这样的fnc:

void fnc(const SomeType&){/**/}  

当我列出这个fnc的前置条件和后置条件时,我认为列出形式的前提条件:
  SomeType必须是正确的类型相当愚蠢,不是吗?我要求这个,因为在我的大学他们希望我们列出这样的东西,但如果arg的类型不正确,代码将无法编译,所以我认为有这个形式的前提条件是错误的。但像往常一样,我错了。

4 个答案:

答案 0 :(得分:1)

不要陈述明显的。

正如您所说,如果类型不匹配,代码显然无法编译。

前后条件将取决于函数的功能。

答案 1 :(得分:0)

这样的评论是愚蠢的 - 我同意。评论应提供一些有用的信息。

前提条件列表应该说明为了运行该函数必须满足的条件。后置条件列表应该告诉函数退出时必须满足的内容。您可以通过三种方式检查这些条件:

  • 运行时断言(使用c macro assert()),当必须满足条件才能运行该函数。否则,该过程终止。
  • 静态断言(如果使用c ++ 0x或BOOST_STATIC_ASSERT,则使用std :: static_assert)。通常不会这样做,因为此检查是在编译时完成的
  • 错误机制(抛出异常或返回错误代码)

您还可以向函数注释添加模板参数列表,如果它们与要求不匹配,则使编译失败。

答案 2 :(得分:0)

如果您的老师要求您添加此类评论,那么这可能不适用于简单的情况,因为此类评论只是简单的愚蠢并且无论如何都会被编译器验证。

但在某些情况下,算法中定义的形式类型可能比C ++中使用的实现类型更具限制性。在这种情况下,这种评论可能会有所帮助。

另一个有用的案例是基于注释的自动生成文档,但文档系统应该能够从函数原型中提取该信息。

答案 3 :(得分:0)

我这样说:

  

第一个参数应为SomeType类型,或者可以转换为它。

编译器是否可以检查它并不重要。如果可以根据函数的签名设计某些前提条件,那并不意味着这些事情不是先决条件。在阅读了前提条件后,用户应该能够编写一个可以正确编译和运行的程序。