banner
NEWS LETTER

4. lambda表达式

Scroll down

我没有太看明白lambda表达式的作用,目前来看我只理解两点:

  1. 把对象的定义和使用放在一起,使代码易读。
  2. 捕获外部变量到对象内部,是一种保护变量的方式

可能我多看一些代码之后会明白lambda的作用吧


具体语法

lambda表达式组成:

1
[捕获变量](参数列表){函数体}

lambda语句定义了一个匿名类的对象,这个类的作用域就是当前大括号。

捕获变量的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
```[]```纯空,不捕获变量
```[=]``` 拷贝外部变量。拷贝到函数体之后,如果对变量值进行修改,不改变原变量值。
```[&]``` 引用外部变量。函数体里对变量值的修改也会改变原变量值,毕竟是把变量地址传到lambda里了。

```C++
class Test

{

public:

void capture_test()

{

// 无捕获,失败

// auto x1 = [](){return ex+1;};

// [=]捕获外部变量

auto x2 = [=](){return ex+2;};

// [&]捕获外部变量的引用

auto x3 = [&](){return ex+3;};

// [this]获得当前所在对象的指针,这里就是获得Test对象的指针

auto x4 = [this](){return ex+4;};

std::cout << "x2: " << x2() << std::endl;

std::cout << "x3: " << x3() << std::endl;

std::cout << "x4: " << x4() << std::endl;

}

int ex = 42;

};

改变lambda内变量

加上mutable即可

1
[]()mutable{}

举例说明

1
2
int x5 = 42;
auto f = [x5]() mutable { return ++x5; };

mutable的作用是允许lambda在函数体内改变变量值,至于被捕获的变量值在lambda外是否被修改,取决于上面提到的[]捕获方式。

其他文章
cover
2. NULL与nullptr
  • 26/03/23
  • 11:11
  • 未分类
cover
1. 字面量
  • 26/03/23
  • 11:06
  • 未分类
目录导航 置顶
  1. 具体语法
    1. 捕获变量的方式
    2. 改变lambda内变量