lambda expressions(lambda 表达式)

语法:
capturemutable->return-type{ statement; };

[capture] 捕获列表。
[parameters] 参数列表。
->return-type 返回类型。
{statement} 函数体。

语法上,捕获列表由多个捕获项组成,并以逗号分割,形式如下(值传递和引用传递):
1.[var] 表示值传递方式捕获变量var
2.[=] 表示值传递方式捕获所有父作用域的变量(包括this)
3.[&var] 表示引用传递捕获变量var
4.[&] 表示引用传递不会所有父作用域的变量(包括this)
5.[this] 表示值传递方式捕获当前的this指针
父作用域:指的是包含lambda函数的语句块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;

int main()
{
int a = 2, b = 4;
auto func = [](int x, int y)->int { return x + y; };
auto c = func(a, b);
cout << c << endl;

[] {}; // 最简 lambda 函数
[=] { return a + b; }; // 省略了参数列表和返回类型
auto func1 = [&](int c) { b = a + c; }; // 省略了返回类型
auto func2 = [=, &b](int c)->int { return b += a + c; };
auto func3 = [a, &b]()->int { return b += a; };

return 0;
}