为什么说开发能够改变人们思维方式的特性,融入编程现实呢?今天小编就整理了这部分内容,希望大家能从文章中找到答案。
C++11中一个小小的lambda特性是如何撬动编程世界的呢?从一方面讲,lambda只是对C++98/03中带有operator()的局部仿函数(函数对象)包装后的“语法甜点”。事实上,在C++11中lambda也被处理为匿名的仿函数。当创建lambda函数的时候,编译器内部会生成这样一个仿函数,并从其父作用域中取得参数传递给lambda函数。
程序员将会发现到处都是奇怪的“lambda笑脸”,即;}[1],而且程序员也必须习惯在各种上下文中阅读翻译lambda函数。顺带一提,lambda笑脸常会出现在每一个lambda表达式的终结部分。另一个人们会改变思维方式的地方则是如何让一个成员函数变得无效。在C++98/03中,我们惯用的方法是将成员函数声明为私有的。如果读者不知道这种方法的用意,很可能在阅读代码的时候产生困惑。
现实世界中的编程往往都有特殊的需求。比如在访问因特网的时候我们常常需要输入URL,而URL通常都包含了斜线“/”。要在C++中输入斜线却不是件容易的事,通常我们需要转义字符“\/”的配合,否则斜线则可能被误认为是除法符号。所以如果读者在写网络地址或目录路径的时候,代码最终看起来就是一堆倒胃口的反斜线的组合,而且会让内容变得晦涩。
另一方面,如今GNU的属性(attribute)几乎无所不在,所有的编译器都在尝试支持它,以用于修饰类型、变量和函数等。不过__attribute__((attribute-name))这样的写法,除了不怎么好看外,每一个编译器可能还都有它自己的变体,比如微软的属性就是以__declspec打头的。因此在C++11中,我们看到了通用属性的出现。
领取专属 10元无门槛券
私享最新 技术干货