c++ 11 新特性 lambda表达式
2014-10-22 14:07
405 查看
来自百度百科:
ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:
[capture list] (parameter list) ->return type { function body }
其中除了“[ ]”(其中捕获列表可以为空)和“复合语句”(相当于具名函数定义的函数体),其它都是可选的。它的类型是唯一的具有成员operator()的非联合的类类型,称为闭包类型(closure type)。
C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。
例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:
然后,再这样调用:
然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写:
这样一来,代码明显简洁多了。
由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:
和其它语言的一个较明显的区别是Lambda和C++的类型系统结合使用,如:
Lambda表达式可以嵌套使用。
即将出版的ISO C++14支持基于类型推断的泛型lambda表达式。上面的排序代码可以这样写:
因为参数类型和函数模板参数一样可以被推导而无需和具体参数类型耦合,有利于重构代码;和使用auto声明变量的作用类似,它也允许避免书写过于复杂的参数类型。特别地,不需要显式指出参数类型使使用高阶函数变得更加容易。
ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:
[capture list] (parameter list) ->return type { function body }
其中除了“[ ]”(其中捕获列表可以为空)和“复合语句”(相当于具名函数定义的函数体),其它都是可选的。它的类型是唯一的具有成员operator()的非联合的类类型,称为闭包类型(closure type)。
C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。
例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:
由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:
即将出版的ISO C++14支持基于类型推断的泛型lambda表达式。上面的排序代码可以这样写:
相关文章推荐
- C++ 11 新特性之 lambda表达式
- c++ 11 新特性
- Visual Studio 11开发者预览版本中的C++新特性(What's New for Visual C++ in Visual Studio 11 Developer Preview)
- c++ 11 新特性
- C++ 11 新特性集合
- C++11 Features in Visual C++ 11 - VS2010对C++11特性支持的情况
- C++学习笔记(11)——虚函数的特性
- C++ 11的几个新特性
- C++ 11新特性在Cocos2dx 3.0应用
- C++ 11新特性在Cocos2dx 3.0应用
- c++ 11新特性之bind()与function
- 程序即人生 » 移动平台现在可用的C++ 11特性
- c++ 11 0x11 新特性之auto 及 for的自动迭代
- C++ 11 Lambda表达式
- C++ 11 新特性
- C++ 11 新特性之 auto
- C++ 0x新特性:详细讲解lambda表达式
- C++ 11 新特性 Smart Pointer详细介绍
- [C++] 11 新特性
- C++11 Features in Visual C++ 11 - VS2010对C++11特性支持的情况