`
RednaxelaFX
  • 浏览: 3052930 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

火星了,今天才知道C++0x也通过了lambda表达式/闭包的提案

    博客分类:
  • C++
阅读更多
如题。我总是后知后觉诶。不过这提案有意思……

之前我在C#与Ruby 1.8在作用域与闭包上的比较的回复里还说C++没有闭包所以不知道它是什么东西也没关系,反正也用不了。这在当前的C++里是没错,不过未来版本的C++里我们也能用到闭包了。
按照C++98(或者叫ISO/IEC 14882 : 1998)的话,要定义一块代码然后把它传来传去的话,我们需要的是一个functor——能重载()运算符的C++的强大能力的一种体现。但是C++的语法不允许我们在一个表达式里定义一个类,所以要使用一个“只用一次”的functor时,我们还非得到函数外面去定义一个有名字的functor类型,很是麻烦。
Boost.Lambda应对就地定义一个在函数里就地定义匿名类型的functor的需求而做了个不错的实现。Boost库里也有binder在简单的情况下用起来还算方便。

Herb Sutter有篇介绍文: Trip Report: February/March 2008 ISO C++ Standards Meeting, 2008/3/29

看到C++0x那lambda表达式的闭包可以有选择性的捕获外部变量我就湿了啊……
不过话说回来,这闭包跟D 2.0在2.007版本之前的状况一样,是不完整意义上的闭包:一旦离开了定义那个lambda表达式的inner most block之后,再调用那个lambda表达式时以reference方式捕获到的变量会发生什么变化未定义……

啊,到时间去找老师了。回来再写点什么。
分享到:
评论
1 楼 Lighting 2008-04-16  
那啥……学完编译原理……然后那啥……连闭包是啥都不知道…… =_,=

相关推荐

    C++ 11 lambda 表达式

    C++ 11引入了lambda表达式,这是一个强大...通过这些知识点,我们可以看到C++11的lambda表达式是如何简化代码、提高可读性和效率的。在VS2010及更高版本中,开发者可以充分利用这一特性,提升C++程序的设计和实现质量。

    C++ 中的 Lambda 表达式

    ### C++ 中的 Lambda 表达式 #### 引言 C++11引入了许多重要的新特性,其中最显著的一项是Lambda表达式。这一特性极大地简化了代码编写过程,使得开发者能够更方便地创建匿名函数对象。Lambda表达式在很多场景下都...

    C++11新特性:Lambda表达式.pdf

    Lambda表达式可以使用与其相同范围scope内的变量,这个引入符的作用就是表明,其后的lambda表达式以何种方式使用(正式的术语是“捕获”)这些变量(这些变量能够在lambda表达式中被捕获,其实就是构成了一个闭包)...

    C++ Lambda表达式详解

    C++ Lambda表达式详解 C++ Lambda表达式是C++语言的一个重要特性,引入于C++11标准中。它可以作为函数对象使用,可以用来替代一些繁琐的函数声明和定义。Lambda表达式的基本语法结构如下:[capture list] ...

    lambda表达式和递归算法

    * lambda 表达式的闭包:lambda 表达式可以捕获外部变量,并将其作为闭包的一部分。 * 递归算法的优点:递归算法可以将复杂的问题分解成更小的子问题,从而使得问题变得更易解决。 * 递归算法的缺点:递归算法可能会...

    2_Lambda表达式.zip

    Lambda表达式是Java编程语言中的一个关键特性,自Java 8开始引入,它极大地简化了函数式编程,尤其是在处理集合数据时。Lambda表达式的主要目的是为了创建匿名函数,即没有名字的函数,它可以被当作一个值传递给方法...

    C#lambda表达式的使用

    Lambda 表达式是 C# 编程语言中的一个重要概念,也是函数式编程的基础。Lambda 表达式可以被用作创建委托对象或表达式树类型。所有的 Lambda 表达式都使用操作符“=>“,表示“goes to (转变为)”。 Lambda 表达式...

    C#将Lambda表达式转成Sql语句

    1. **创建表达式树**:通过调用`Expression.Lambda`方法,我们可以创建一个表示Lambda表达式的表达式树。 2. **解析表达式树**:通过递归遍历表达式树,我们可以解析出查询操作的细节,如属性访问、条件判断、函数...

    Java8的lambda表达式

    Lambda表达式使得代码更加简洁、易读,同时也提升了程序的执行效率。在本文中,我们将深入探讨Lambda表达式的核心概念、语法以及它在实际开发中的应用。 一、Lambda表达式基础 1. **什么是Lambda表达式?** ...

    Java 8 lambda表达式

    Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...

    C++ Lambda Story - From C++98 to C++20.pdf

    **C++ Lambda表达式**是C++编程语言中一个强大的特性,从C++11标准开始引入,到C++20标准进一步增强。Lambda表达式允许程序员在代码中定义匿名函数,即没有名称的函数,这极大地提高了代码的灵活性和可读性。本书...

    C++ 之 Lambda 表达式

    C++之Lambda表达式 C++之Lambda表达式是C++11标准中引入的一种新的函数定义方式,用于定义匿名函数,使得代码更加灵活简洁。Lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更...

    jdk1.8 Lambda表达式

    Lambda 表达式,也被称作闭包,它使得 Java 语言变得更加灵活和具有函数式编程特性。在 Java 8 之前,如果要将一个行为(例如方法)作为参数传递给另一个方法,通常需要通过定义一个接口和一个实现该接口的匿名类。...

    java8 lambda表达式学习总结

    Java 8 的 Lambda 表达式是其最显著的新特性之一,它引入了一种更为简洁、函数式的编程风格。Lambda 表达式使得处理匿名函数变得更加简单,尤其在需要定义短小、无状态的代码块时,它们可以极大提高代码的可读性和...

    java8lambda表达式Demo

    Java 8 是一个重要的Java平台版本,因为它引入了许多新特性,其中最显著的就是Lambda表达式。...通过研究这个Demo,你可以深入了解Lambda表达式如何简化代码,提高生产力,并为你的Android项目带来现代编程实践。

    Lambda表达式的例子

    此外,Lambda表达式也可以用于方法引用,比如对于已有的静态方法或对象的实例方法,可以直接引用而无需重新编写逻辑: ```java Collections.sort(people, Comparator.comparing(Person::getName)); ``` 这里使用了...

    C# Lambda表达式

    虽然Lambda表达式非常灵活,但它们也有一些限制,比如不能包含控制流语句(如`if`、`for`或`while`)以及无法访问局部变量(除非是闭包)。 总之,C# Lambda表达式提供了一种简洁的方式来定义函数,尤其在处理数据...

    JavaLambda表达式和匿名类.pdf

    Java 8 引入了Lambda表达式,这是对传统编程方式的一大革新,它极大地简化了函数式编程,尤其是在处理集合和并发操作时。Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的...

Global site tag (gtag.js) - Google Analytics