在 C++ 中,可以声明一个函数是 const,这意味着,据我所知,编译器确保函数不会修改对象。在 C++ 中是否有类似的东西我可以要求一个函数是纯函数?如果不是在 C++ 中,是否有一种语言可以满足这一要求?
如果这是不可能的,为什么可以要求函数是 const 而不是要求它们是纯的?这些要求有何不同?
为了清楚起见,我希望没有副作用,并且不使用传递给函数的变量以外的变量。因此,不应该有文件读取或系统调用等。
这是副作用的更清晰定义:
不修改运行程序的计算机上的文件,也不修改函数范围外的变量。除了传递给函数的变量之外,没有其他信息用于计算函数。每次运行该函数时,它都应该返回相同的内容。
注意:我做了更多的研究并遇到了纯脚本 (感谢 jarod42 的评论)
基于对维基百科文章的快速阅读,我的印象是您可以要求纯脚本中的函数是纯函数,但我并不完全确定。
小智 1
简短的回答:不。没有等效的关键字 calledpure可以像 does 那样约束函数const。
但是,如果您有一个特定的全局变量,并且希望保持不变,则可以选择static type myVar. 这将要求只有该文件中的函数才能使用它,而该文件之外的任何函数都不能使用它。这意味着该文件之外的任何函数都将被迫保留它。
至于“副作用”,我将逐一分解,以便您知道您有哪些选择:
据我所知,您不能限制函数执行此操作。C++ 只是没有提供一种方法来约束这样的函数。但是,如果您愿意,您可以设计一个不修改任何文件的函数。
据我所知,除了通过指针或引用作为参数传递的任何变量之外,全局变量是唯一可以在函数范围之外修改的变量。全局变量可以选择是常量或静态,这将使您无法修改它们,但是除此之外,据我所知,您实际上无能为力。
再说一次,你不能强迫它这样做,让我知道。但是,如果您愿意,您可以将函数设计为像这样工作。
我不确定我明白为什么你想限制这样的函数,但不。我不知道。再说一次,如果你愿意的话,你可以这样设计。
至于为什么C++不提供这样的选项?我猜可重用性。看来您有一个不希望函数执行的特定操作列表。然而,许多其他 C++ 用户作为一个整体需要这组特定约束的可能性通常很小。也许他们一次需要一两个,但不是一次全部需要。看来不值得这么麻烦地添加它。
然而,对于 却不能说同样的话const。const一直使用,尤其是在参数列表中。这是为了防止数据通过引用或其他方式传递时被修改。因此,编译器需要知道哪些函数修改了对象。它const在函数声明中使用来跟踪这一点。否则,它无从得知。然而,通过使用const,它非常简单。它可以限制对象仅使用保证其保持不变的函数,或者const在函数声明中使用关键字。
因此,const得到了大量的重用。
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |