1.4.7 开发能够改变人们思维方式的特性

C++11中一个小小的lambda特性是如何撬动编程世界的呢?从一方面讲,lambda只是对C++98/03中带有operator()的局部仿函数(函数对象)包装后的“语法甜点”。事实上,在C++11中lambda也被处理为匿名的仿函数。当创建lambda函数的时候,编译器内部会生成这样一个仿函数,并从其父作用域中取得参数传递给lambda函数。不过,真正会改变人们思维方式的是,lambda是一个局部函数,这在C++98/03中我们只能模仿实现该特性。此外,当程序员开始越来越多地使用C++11中先进的并行编程特性时,lambda会成为一个非常重要的语法。程序员将会发现到处都是奇怪的“lambda笑脸”,即;}[1],而且程序员也必须习惯在各种上下文中阅读翻译lambda函数。顺带一提,lambda笑脸常会出现在每一个lambda表达式的终结部分。

另一个人们会改变思维方式的地方则是如何让一个成员函数变得无效。在C++98/03中,我们惯用的方法是将成员函数声明为私有的。如果读者不知道这种方法的用意,很可能在阅读代码的时候产生困惑。不过今天的读者非常幸运,因为在C++11中不再需要这样的手段。在C++11中我们可以通过显式默认和删除的特性,清楚明白地将成员函数设为删除的。这无疑改变了程序员编写和阅读代码的方式,当然,思考问题的方式也就更加直截了当了。

我们会在第7章中看到相关特性的描述。

[1]lambda笑脸是一种编写lambda函数的编程风格,即在lambda函数结束时将分号与括号连写,看起来就是一个;}形式的笑脸。而实际在本书第7章中没有采用lambda笑脸的编程风格。