`
RednaxelaFX
  • 浏览: 3019248 次
  • 性别: 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  
那啥……学完编译原理……然后那啥……连闭包是啥都不知道…… =_,=

相关推荐

Global site tag (gtag.js) - Google Analytics