C++11 lambda表达式
来源:互联网 发布:mac液体唇膏三文鱼粉 编辑:程序博客网 时间:2024/06/05 06:38
C++11lambda表达式
1、lambda的申明方式
Lambda表达式是c++11的新特性,它允许程序员在函数内部创建一个匿名函数,对于一些小型的功能模块,可以使用lambda表达式来实现。很多其他语言已经有了lambda表达式,比如objective-c中block就类似。
Lambda表达式的声明方式:
例如:
auto fadd = [](inta, int b){
returna + b;
};
Fadd就是一个匿名函数,后面是它的实现,auto是自动类型,也是c++11新加入的特性,auto可以自动判断类型。[]表示开始定义lambda表达式,他可以带参数,()里面的是函数的参数,{}体内的是函数体。这里函数的返回值隐含了,也可以指明函数的返回值。例如
显示指明返回值,采用:
auto fadd = [](inta, int b)->int
{
returna + b;
};
总结:lambda表达式的申明形势为
[captures] (params) -> ret {Statments;}
2、lambda表达式的变量截取
考虑这样一种情况,加入你的lambda表达式需要使用外部变量,那该怎么办呢?lambda表达式提供了变量截取的功能。
例如:
int val = 1;
auto fadd = [&](inta, int b)->int
{
return val =a + b + val;
};
cout << fadd(2, 3) <<endl;
cout << "val = " << val<< endl;
val是外部变量,如果在fadd中需要访问val,必须在[]中指明截取方式,这里用的&表示截取外部作用域中所有变量,并作为引用在函数体中使用。
Lambda表达式中有多种变量截取方式。
下面是各种变量截取的选项:
- [] 不截取任何变量
- [&} 截取外部作用域中所有变量,并作为引用在函数体中使用
- [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用
- [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
- [bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
- [this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
- 【c/c++】Lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- C#--Lambda表达式
- C#:Lambda 表达式
- C++lambda表达式
- C++lambda表达式
- C# Lambda表达式
- C++:lambda表达式
- C#Lambda表达式
- 【c++】lambda表达式
- C++lambda表达式简记
- c#lambda表达式复习
- [C++]Lambda表达式简介
- 【C#】理解Lambda表达式
- 【C++】Lambda表达式
- C++lambda表达式
- qt超强绘图控件qwt - 安装及配置
- LeetCode || Unique Binary Search Trees
- hadoop 处理不同的输入文件,文件关联
- iptalbes绑定mac
- Spring学习之DI(二)
- C++11 lambda表达式
- maven基础学习(三)-简单实例(运行)
- 郝斌数据结构(二):单链表
- LeetCode || Binary Tree Preorder Traversal
- Android中使用gson解析JSON
- Java获取数字中单个数字,实例 获取水仙花数
- hadoop学习-倒排索引
- linux 下 opendir 和 readdir 函数的应用
- leetcode: Trapping Rain Water