c++ - 强制函数为纯函数

标签 c++

在 C++ 中,可以将函数声明为 const,这意味着,据我所知,编译器确保函数不会修改对象。在 C++ 中是否有类似的东西可以要求函数是纯函数?如果不是在 C++ 中,是否有一种语言可以满足此要求?

如果这不可能,为什么可以要求函数是 const 而不是要求它们是纯的?是什么让这些要求不同?

为了清楚起见,我纯粹希望没有副作用,也没有使用传递给函数的变量以外的变量。因此,应该没有文件读取或系统调用等。

这里有一个更清晰的副作用定义:

不修改运行程序的计算机上的文件,也不修改作用域在函数之外的变量。除了传递给它的变量之外,没有信息用于计算函数。运行函数应该在每次运行时返回相同的东西。

注意:我做了更多研究并遇到了 pure script (感谢 jarod42 的评论)

基于对维基百科文章的快速阅读,我的印象是您可以要求纯脚本中的函数是纯函数,但我并不完全确定。

最佳答案

简短回答:不。没有名为 pure 的等效关键字可以像 const 那样限制函数。

但是,如果您有一个特定的全局变量并希望保持不变,您可以选择 static type myVar。这将要求只有该文件中的函数才能使用它,而该文件之外的任何函数都不能使用它。这意味着该文件外部的任何函数都将被限制不理会它。

至于“副作用”,我将逐一分解,以便您了解您有哪些选择:

  • 不修改运行程序的计算机上的文件。

据我所知,您不能限制函数来执行此操作。 C++ 只是不提供一种方法来约束这样的函数。但是,如果愿意,您可以设计一个不修改任何文件的功能。

  • 不修改作用域外的变量。

据我所知,除了通过指针或引用作为参数传递的任何内容外,全局变量是唯一可以在函数范围之外修改的变量。全局变量可以选择常量或静态,这将阻止您修改它们,但除此之外,据我所知,您实际上无能为力。

  • 除了传递给函数的变量外,没有任何信息用于计算函数。

同样,您不能强制它这样做,我知道。但是,如果需要,您可以将函数设计成这样工作。

  • 运行函数应该在每次运行时返回相同的东西。

我不确定我是否理解您为什么要像这样约束一个函数,但是不。不是我知道的。同样,如果您愿意,也可以这样设计。

至于为什么 C++ 不提供这样的选项?我猜可重用性。您似乎有一个特定的列表,列出了您不希望您的函数执行的操作。然而,许多其他 C++ 用户作为一个整体需要这组特定约束的可能性通常非常小。也许他们一次需要一两个,但不是一次全部。添加它似乎不值得。

然而,关于 const 却不能这样说。 const 一直被使用,尤其是在参数列表中。这是为了防止数据在通过引用或其他方式传递时被修改。因此,编译器需要知道哪些函数修改了对象。它在函数声明中使用 const 来跟踪这一点。否则,它是无从知晓的。但是,通过使用 const,它非常简单。它可以限制对象只使用保证它保持不变的函数,或者在函数声明中使用 const 关键字。

因此,const 得到了很多重用。

关于c++ - 强制函数为纯函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56301071/

相关文章:

c++ - 是否可以重用通常的迭代器来构建 const 迭代器?

c++ - std string vs char performance,从一开始就删除部分的最佳技术

c++ - 递归地 intToStr

c++ - 碰撞检测和时间复杂度 : How do I make checking for collisions easier?

java - 如何将字符串编码为 8 位 ASCII 字符?

python - SWIG 语法错误

c++ - 如何在 MFC 应用程序首次启动时禁用自动文档/ View 创建

c++ - 使用指针对链表 C++ 进行排序

c++ - 在 C++ 中返回一个类

c++ - 如何在 C++ 中进行多线程文件处理?