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函数详解的更多相关文章

  1. deep_learning_Function_ lambda函数详解

    这里总结了关于 Python 中的 lambda 函数的“一个语法,三个特性,四个用法”. 一个语法: 在 Python 中,lambda 函数的语法是唯一的.其形式如下: lambda argume ...

  2. c/c++ 标准库 bind 函数 详解

    标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...

  3. python3 内置函数详解

    内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小. >>> abs(-25) 25 >&g ...

  4. Kotlin——高级篇(二):高阶函数详解与标准的高阶函数使用

    在上面一个章节中,详细的讲解了Kotlin中关于Lambda表达式的语法以及运用,如果还您对其还不甚理解,请参见Kotlin--高级篇(一):Lambda表达式详解.在这篇文章中,多次提到了Kotli ...

  5. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  6. JAVA8之lambda表达式详解

    原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...

  7. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  8. malloc 与 free函数详解<转载>

    malloc和free函数详解   本文介绍malloc和free函数的内容. 在C中,对内存的管理是相当重要.下面开始介绍这两个函数: 一.malloc()和free()的基本概念以及基本用法: 1 ...

  9. NSSearchPathForDirectoriesInDomains函数详解

    NSSearchPathForDirectoriesInDomains函数详解     #import "NSString+FilePath.h" @implementation ...

随机推荐

  1. Spring依赖包

    spring框架jar包 1.下载spring源包spring地址:http://www.springsource.org/download我下的是spring-framework-3.1.0.REL ...

  2. spring boot aop 报错

    1.控制台报错 Pointcut is not well-formed: expecting 'name pattern' at character position 33 execution(com ...

  3. 通过这些示例快速学习Java lambda语法

    对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...

  4. [Android]Java中点击事件的四种写法

    点击事件的必备条件:实现OnClickListener接口,重写onclick(View v)方法 以拨号简单案例为例,如下图效果: 逻辑流程: 获取点击对象,获取数据 给对象设置监听类 实现OnCl ...

  5. JVM复习--新生代GC

    在复习Java内存机制的过程中有一些新问题,自问自答,做个记录.新生代是java堆内存的一部分.堆内存分新生代和老生代两大块,也有把堆内存分为新生代老生代永久代(持久代)三块的说法.(不过这种说法应该 ...

  6. CSS 关于屏幕适配REM

    这里不多说了,想详细了解的可以参考 2350305682 的博客 https://www.cnblogs.com/annie211/p/8118857.html 不想多深究,想先实现的看这(移动端): ...

  7. (1-2)line-height的各类属性值

    (1-2)line-height的各类属性值 首先来个疑问!没有问题印象不深嘛 一.line-height支持哪些属性值呢? 五只手指头就能数过来了咯. 比如normal, <number> ...

  8. [基础架构]PeopleSoft Tuxedo 重要文件说明

    我们都知道PeopleSoft是由几个不同的服务组成的,他们在PeopleSoft体系结构中扮演着自己的角色.这些服务具有不同的文件结构并包含重要的可执行文件和配置文件. 以下是Peoplesoft体 ...

  9. gis cad导出弧段在arcmap下 不准问题

    我发现cad 的图形导出到arcmap下会出现各种各样的丢失问题,特别是cad的弧段在arcmap下会弯曲(弧度指向另外一边). 那么应该怎么解决这个问题呢?后来想到FME可以高效的还原cad的图形, ...

  10. 简单的分页小demo

    public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Sy ...