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

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

之前我在 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方式捕获到的变量会发生什么变化 未定义……

啊,到时间去找老师了。回来再写点什么。

你可能感兴趣的:(C++,c,C#,Blog,Ruby)