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

如题。我总是后知后觉诶。不过这提案有意思……

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

Herb Sutter有篇介绍文: [url=http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!785.entry]Trip Report: February/March 2008 ISO C++ Standards Meeting[/url], 2008/3/29

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

啊,到时间去找老师了。回来再写点什么。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值