如果我有这样的 fnc:

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

当我列出此 fnc 的前提条件和后置条件时,我认为列出形式的前提条件:
SomeType 必须是正确的类型 相当愚蠢,不是吗?我之所以要求这个,是因为在我的大学,他们希望我们列出类似的内容,但如果参数的类型不正确,代码无论如何都不会编译,所以我认为这种形式的前提条件是错误的。但和往常一样,我错了。

有帮助吗?

解决方案

不言自明的。

正如你所说,该代码显然不会,如果类型不匹配编译。

在前置和后置条件将取决于哪些功能是试图做的。

其他提示

如果你的老师问你加入这样的评论,它可能不是简单的情况下,当这样的评论只是普通的愚蠢和验证的编译器反正。

但是,在某些情况下,在该算法中所定义的形式类型可能比在C ++中使用的实现类型更多的限制。在这种情况下那样的评论可能有一些使用。

另一个有用的情况下,是用于基于评论自动生成的文档,但文档系统应该能够通过本身从函数原型提取该信息。

我声明它是这样的:

  

第一个参数应为类型SomeType,或浇注到它的

无论是编译器可以检查没关系。如果的一些的先决条件可以从函数的签名设计,这并不意味着,这些东西都不是前提条件。阅读了先决条件,用户应能够写入将被正确地编译和运行的程序。

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

前提条件列表应该告诉我们必须满足什么才能运行该函数。后置条件列表应该告诉函数退出时必须满足什么。您可以通过三种方式检查这些条件:

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

您还可以在函数注释中添加模板参数列表,如果不符合要求则编译失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top