我一直在阅读这篇文章:http ://en.wikipedia.org/wiki/Function_pointer ,我有点困惑。由于 C/C++ 支持函数指针,这是否意味着它们通常支持函数式编程?请注意,我实际上并不想使用 C 或 C++ 进行函数式编程,但我很好奇,因为我从未听说过 C 或 C++ 支持这样的东西。(我知道 C 中存在许多函数式编程语言的编译器,但这并不是我所说的“支持”的真正含义)。
3 回答
函数式编程(如果您真的感兴趣,请查看)与函数指针或缺少函数指针关系不大。
C++ 是一种多范式语言,大量支持 FP,尤其是后期版本。许多与 WG21 合作的人都喜欢 FP 并寻求支持。在 C++11 中,我们甚至得到了 lambda,在 C++14 中,多态 lambdas 首次亮相。这涵盖了很多事情。虽然函数仍然是二等公民,但 lambda 可以很好地接管。
不幸的是,尾递归处理仍然不是强制性的,但编译器实际上会处理它,并且在过去十年中,当您刚刚弄乱了 const 重载时,甚至可以方便地报告“无限递归”。:)
你可以在 C++ 中使用 FP 风格走得很远,学习它可以帮助你编写更好的代码,即使你选择了其他风格。我鼓励大家学习SICP。
编辑:我不确定为什么这个答案会受到如此多的仇恨。该问题专门询问函数指针,以及它们的存在是否意味着 C++ 支持“一般的函数式编程”。
以一种技术性的,不是很有用的方式:是的*。“函数式”编程的真正本质是函数是值。C 和 C++ 在轻松创建和销毁词法闭包等方面不会给您任何帮助,在部分应用方面也不会给您带来任何好处。您可以使用函数指针来模拟行为有点像值的函数的外观这一事实实际上只是等效表达性语言的结果。试图将其与“函数式编程”混为一谈真的是在深入图灵 tarpit。
*为了真正的技术区别,C 和 C++ 确实没有任何函数类型值。函数指针与函数值不同,即使你眯着眼睛看它们看起来有点相似。
您可以使用 C++ 进行函数式编程,尽管该语言并不能完全提供帮助。一阶函数式编程,您尽可能简单地使用不可变值当然很容易,虽然不是很容易,但您实际上可以实现monads!