如果我有这样的fnc:
void fnc(const SomeType&){/**/}
当我列出这个fnc的前置条件和后置条件时,我认为列出形式的前提条件:
SomeType必须是正确的类型相当愚蠢,不是吗?我要求这个,因为在我的大学他们希望我们列出这样的东西,但如果arg的类型不正确,代码将无法编译,所以我认为有这个形式的前提条件是错误的。但像往常一样,我错了。
答案 0 :(得分:1)
不要陈述明显的。
正如您所说,如果类型不匹配,代码显然无法编译。
前后条件将取决于函数的功能。
答案 1 :(得分:0)
这样的评论是愚蠢的 - 我同意。评论应提供一些有用的信息。
前提条件列表应该说明为了运行该函数必须满足的条件。后置条件列表应该告诉函数退出时必须满足的内容。您可以通过三种方式检查这些条件:
您还可以向函数注释添加模板参数列表,如果它们与要求不匹配,则使编译失败。
答案 2 :(得分:0)
如果您的老师要求您添加此类评论,那么这可能不适用于简单的情况,因为此类评论只是简单的愚蠢并且无论如何都会被编译器验证。
但在某些情况下,算法中定义的形式类型可能比C ++中使用的实现类型更具限制性。在这种情况下,这种评论可能会有所帮助。
另一个有用的案例是基于注释的自动生成文档,但文档系统应该能够从函数原型中提取该信息。
答案 3 :(得分:0)
我这样说:
第一个参数应为
SomeType
类型,或者可以转换为它。
编译器是否可以检查它并不重要。如果可以根据函数的签名设计某些前提条件,那并不意味着这些事情不是先决条件。在阅读了前提条件后,用户应该能够编写一个可以正确编译和运行的程序。