C++11 Lambda Function

C++11 Lambda Function

What is a Lambda Function?

lambda函数是C++中的一种匿名函数,通常用作回调使用,像普通的函数那样,也需要传递参数和返回结果。但区别就是,lambda函数没有名字,因此主要用来创建那些短小的函数。

Need of Lambda functions

假设以下使用std::for_each算法的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>

void display(int a)
{
std::cout<<a<<" ";
}
int main() {
int arr[] = { 1, 2, 3, 4, 5 };

std::for_each(arr, arr + sizeof(arr) / sizeof(int), &display);

std::cout << std::endl;

}

在上面的例子中,我们创建了一个单独函数,但使用lambda函数,我们可以避免这种开销。

Rise of Lambda functions

lambda函数是一种匿名函数,它没有任何名称,但您可以传递参数并从中返回结果。如下:

1
2
3
[](int x) {
std::cout<<x<<" ";
}
  • []用来传递外部域的元素;
  • (int x)则是传递进来的参数;

利用lambda函数改写:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>

int main() {
int arr[] = { 1, 2, 3, 4, 5 };

std::for_each(arr, arr + sizeof(arr) / sizeof(int), [](int x) {
std::cout<<x<<" ";
});

std::cout << std::endl;

}

How to pass outer scope elements inside lambda functions

case 1: 使用[=]

1
2
3
[=](int &x) {
// All outer scope elements has been passed by value
}

case 1: 使用[&]

1
2
3
[&](int &x) {
// All outer scope elements has been passed by reference
}