Lambda表达式

匿名函数

  • 声明格式

    [capture list] (params list) mutable exception ->return type {function body }
    

capture list

捕获外部变量列表,在Lambda表达式的可见范围内的可见外部变量,如果Lambda函数想要访问他,就必须在capture list里声明,多个外部变量用,分割

int a = 10, b=20;
cout << [a] () {return a;}() ;                  //输出10

//如果想返回a+b的值
//第一种方法
cout << [a,b] {return a+b;}; //没有参数、mutable、exception、-> 、return type的时候,形参的括号可以省略
//第二种方法
cout << [=] {return a+b;}; 
//懒得写捕获参数列表时或者需要捕获的太多,就用[=]来声明所有外部可见变量
//这两种方法是值传递

//如果想修改 外部变量 a和b 的值呢?
//第一种方法
[&a, &b]{a=0, b=0;};
//第二种方法
[&] {a=0,b=0;};
//以上两种方法都是引用传递

params list

参数列表

  1. 不能有默认参数
  2. 不支持可变参数
  3. 所有参数必须有参数名

mutable

当捕获列表是值传递的时候,这个值是int const(注意不是引用),若想在函数体内修改,必须加mutable修饰符

int a=10;

[=]() mutable {a=20; cout << a;};
//由于是值传递,所以外部的a值不变

返回类型

可省略, 由return语句决定;

posted @ 2020-02-22 22:32  hellozhangjz  阅读(185)  评论(0编辑  收藏  举报