在函数是关键角色的过程语言中,按契约(Contract)设计范式基本上表示在接受参数的函数与调用者之间存在协议(protocol)。

该协议(protocol)类似于“如果调用者确保满足该函数的先决条件,则该函数将以预期的方式工作和/或返回预期的值”。

如果我们严格按照这种方式编写代码,则仅由调用方负责确保对函数的正确输入。但是以防御性编程的名义,包括内部保护措施以防调用者做一些愚蠢的事情似乎是明智的。

在软件架构和设计方面,最好的方法是什么?

最佳答案

这是 call 者的责任。例如,如果传递空指针,那么strlen的实现又会做什么?它唯一能做的就是中止程序-这是C语言中可行的选择(如果过于严格)。在C++中,它可能会引发异常(但如果遵循C++标准,则不会抛出异常),但是处理该异常将非常难。因此,唯一允许程序保持在已知状态下运行的明智解决方案是,不要使用空指针作为参数来调用strlen,从而在调用代码上增加检查的责任。

关于c++ - 检查前提条件应由谁负责?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52796361/

10-09 15:54