首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++0x (C++11)作为函数式语言?

C++0x (C++11)作为函数式语言?
EN

Stack Overflow用户
提问于 2011-02-01 02:51:00
回答 2查看 2.8K关注 0票数 18

我想知道C++0x (C++11) (具有lambda和完美转发)是否是函数式语言(超集)。函数式语言中有没有C++没有的特性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-01 04:48:09

函数式编程范式将计算建模为集合之间的关系,因此本质上是声明性的。然而,在实践中,我们经常认为函数是命令式的,即你输入一个输入值,然后输出一个输出值,就像一个过程一样。从这个角度来看,函数的特征属性是它没有副作用。由于术语的模糊性,我们称这样的函数为纯函数,只有纯函数的语言才是纯函数语言。

然而,并不是所有的函数式语言都是纯粹的:函数式语言是一种具有语法和语义的语言,它允许程序员有效地使用函数式范例。使得使用该范式可行的一些概念包括-以及其他-带有词法闭包的lambda表达式、高阶函数、变体类型和模式匹配、惰性计算、类型推断(在静态类型语言的情况下)。

这决不是一个权威性的列表,一种语言在不提供全部甚至大部分功能的情况下也可以很好地实现功能,但如果一种语言提供了--即使它们在不需要跳跃主要障碍的情况下变得可用--它们的存在就是一个强烈的迹象,表明该语言应该被认为是功能的。

我对Boost的了解还不够多,无法决定C++03 + Boost是否是一种可行的函数式语言,但C++0x确实让C++变得更加函数式,甚至可能将其推向函数式语言领域的主观边界。

顺便说一句,同样的考虑也适用于其他编程范式: C++也不是一种纯粹的面向对象的语言(实际上,设计一种既是纯函数式的,又是纯粹的面向对象的语言是非常困难的--甚至在理论上是不可能的),而且通常与OO相关的大多数特性(类、继承、封装)实际上也不是授权的……

票数 15
EN

Stack Overflow用户

发布于 2011-02-01 03:40:50

查看C2维基上的Functional Programming Languages定义和讨论列表。

一些最常见的(也是争议最少的)特性是:

可以用函数闭包( function objects.

  • Lexical
  • )模拟第一类函数--闭包类代表第一类顺序函数( function )--可以用赋值( classes.
  • Single )来模拟--这更像是一种约定。您可以通过声明所有变量集合求值来做到这一点-可以通过TMP
    • Garbage const.
    • Lazy 实现-仍然缺少。在函数式语言中几乎是必需的,因为生命周期和作用域是不同的,正如@Pascal在上面的注释中指出的那样。
    • 类型推断- auto
    • Tail调用优化-对于函数式语言并不是严格必需的,但在C++中依赖于编译器。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4854774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档