题
如果我有这样的 fnc:
void fnc(const SomeType&){/**/}
当我列出此 fnc 的前提条件和后置条件时,我认为列出形式的前提条件:
SomeType 必须是正确的类型 相当愚蠢,不是吗?我之所以要求这个,是因为在我的大学,他们希望我们列出类似的内容,但如果参数的类型不正确,代码无论如何都不会编译,所以我认为这种形式的前提条件是错误的。但和往常一样,我错了。
解决方案
不言自明的。
正如你所说,该代码显然不会,如果类型不匹配编译。
在前置和后置条件将取决于哪些功能是试图做的。
其他提示
如果你的老师问你加入这样的评论,它可能不是简单的情况下,当这样的评论只是普通的愚蠢和验证的编译器反正。
但是,在某些情况下,在该算法中所定义的形式类型可能比在C ++中使用的实现类型更多的限制。在这种情况下那样的评论可能有一些使用。
另一个有用的情况下,是用于基于评论自动生成的文档,但文档系统应该能够通过本身从函数原型提取该信息。
我声明它是这样的:
第一个参数应为类型
SomeType
,或浇注到它的
无论是编译器可以检查没关系。如果的一些的先决条件可以从函数的签名设计,这并不意味着,这些东西都不是前提条件。阅读了先决条件,用户应能够写入将被正确地编译和运行的程序。
做出这样的评论是愚蠢的——我同意。评论应该提供一些有用的信息。
前提条件列表应该告诉我们必须满足什么才能运行该函数。后置条件列表应该告诉函数退出时必须满足什么。您可以通过三种方式检查这些条件:
- 运行时断言(使用c宏 断言()),当必须满足条件才能运行该函数时。否则进程终止。
- 静态断言(如果使用 c++0x,则使用 std::static_assert 或 BOOST_STATIC_ASSERT)。通常不这样做,因为此检查是在编译时完成的
- 错误机制(抛出异常或返回错误代码)
您还可以在函数注释中添加模板参数列表,如果不符合要求则编译失败。
不隶属于 StackOverflow