lambda函数详解
lambda函数的作用就是可以编写内嵌的无名函数,而不必写成独立的函数;
结构:[]为开始,(参数){函数体}
例如:
1.
auto lambdaFun1 = [](int a) {std::cout << "hello world" << std::endl; }; //定义lambdaFun1函数
lambdaFun1(); //调用lambdaFun1函数
2.可以指明返回类型
在()后采用->,称为拖尾返回类型;
auto lambdaFun2 = [](int a, int b) {return a + b; };
int a = lambdaFun2(, );
std::cout << a << std::endl;
3.lambda函数可以在其封装的作用域内捕捉变量
float data = ;
auto returnNum = [data] {std::cout << "data : " << data << std::endl; };
returnNum();
4。当在外捕捉的变量为const类型的时候,我们想在lambda函数体内改变这个const的值,可以引入mutabl来指明这个const转化为非const变量
int a = ;
auto returnNum = [a]() mutable {a *= ; std::cout << "a :" << a << std::endl; };
returnNum();
std::cout << a << std::endl;
结果是:
a :20
10
注意的是:使用mutable时必须书写();
5.捕捉的方式:
[=] : 表示值捕捉所有的变量
[&] :表示通过引用捕捉所有变量
[&x] : 表示捕捉变量x,而且还是按引用来捕捉的,
[x] : 表示按值捕捉变量x
[=,&x,&y] :表示按值捕捉所有的变量但是除了x和y,以为x和y时按引用捕捉的;
[this] :捕捉周围的对象
6.C++14里规定了lambda函数内部可以自己判断类型auto:
std::vector<int> ints = { ,,,, };
std::vector<double> doubles = { 1.2,2.3,3.4,4.5 };
auto isGreatThan3 = [](auto i) {return i > 3.4; };
auto result = find_if(std::cbegin(ints), std::cend(ints), isGreatThan3);
if (result != std::cend(ints))
{
std::cout << "find it : " << *result << std::endl;
}
else
{
std::cout << "no find " << std::endl;
}
auto result1 = find_if(std::cbegin(doubles), std::cend(doubles), isGreatThan3);
if (result1 != std::cend(doubles))
{
std::cout << "find it : " << *result1 << std::endl;
}
else
{
std::cout << "no find " << std::endl;
}
7.std::function 是一个多态的函数模板包装,类似与函数指针,它可以i绑定任意能调用的对象
例如:返回一个double,接收两个整形参数的函数包装定义如下:
std::function<double(int , int )> myFunction;
也可以给lambda表达式指定名称,并从函数中返回;
std::function<int(void)> lambdaName(int x)
{
return [x]{return 2*x;}; //这里不能按引用来传递x;
}
说明:这个函数主题上时创建了一个lambda表达式,可见lambda接受的参数无,返回的是int类型;
可以通过下列方式来调用;
std::function<int(void)> fn = lambdaName(5);
lambda函数详解的更多相关文章
- deep_learning_Function_ lambda函数详解
这里总结了关于 Python 中的 lambda 函数的“一个语法,三个特性,四个用法”. 一个语法: 在 Python 中,lambda 函数的语法是唯一的.其形式如下: lambda argume ...
- c/c++ 标准库 bind 函数 详解
标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...
- python3 内置函数详解
内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小. >>> abs(-25) 25 >&g ...
- Kotlin——高级篇(二):高阶函数详解与标准的高阶函数使用
在上面一个章节中,详细的讲解了Kotlin中关于Lambda表达式的语法以及运用,如果还您对其还不甚理解,请参见Kotlin--高级篇(一):Lambda表达式详解.在这篇文章中,多次提到了Kotli ...
- Java 8 Lambda 表达式详解
一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...
- JAVA8之lambda表达式详解
原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- malloc 与 free函数详解<转载>
malloc和free函数详解 本文介绍malloc和free函数的内容. 在C中,对内存的管理是相当重要.下面开始介绍这两个函数: 一.malloc()和free()的基本概念以及基本用法: 1 ...
- NSSearchPathForDirectoriesInDomains函数详解
NSSearchPathForDirectoriesInDomains函数详解 #import "NSString+FilePath.h" @implementation ...
随机推荐
- Java基础——死锁
1.关于死锁,百度百科的解释: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们将都无法进行下去.此时称系统处于死锁状态或系统产生了死锁 ...
- Code Signal_练习题_absoluteValuesSumMinimization
Given a sorted array of integers a, find an integer x from a such that the value of abs(a[0] - x) + ...
- 微信小程序 发现之旅(三)—— 组件之间的参数传递
一.URL 传参 当使用 navigateTo() 方法跳转页面的时候,可以在 url 后面接 query 参数 然后在 Page 页面的生命周期函数 onLoad 中可以接收到这些参数 这种方式只能 ...
- linux新手向-文件的权限及修改
如果访问或执行一个文件显示Permission deny,一般是权限问题. 使用"ls -l"可以查看该目录下文件的详细信息. 1.读懂权限 第一列就是权限信息,形如: drwxr ...
- Nginx部署入门
一.什么是Nginx? Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3 ...
- WebSerivce与WebAPI的区别
一.什么是Web Service Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应 ...
- img,a,锚链接,超链接
1.图片标签:img,单标签 图片属性: src(source): 图片的来源(路径),可以放置本地图片,也可以放网上的图片的url地址 title: 当鼠标停留在图片上的时候,显示提示的文字 alt ...
- SD从零开始09-10
SD从零开始9 数据流(Data Flow) 根据参考创建Create with reference 可以参考之前的凭证来创建销售凭证,可以在初始画面,也可以在凭证处理过程中,通过uniform. d ...
- WOSA/XFS PTR Form解析库—FormRule.h
#ifndef _FORMRULE_H_#define _FORMRULE_H_ #include <XFSPTR.H>#include <string>#include &l ...
- 团队项目个人进展——Day09
一.昨天工作总结 冲刺第九天,把地图和界面整合了一下 二.遇到的问题 地图的样式和一些公共样式有冲突 三.今日工作规划 团队共同整合程序,做出第一阶段的成品.