一、匿名函数的基本语法
- lambda 表达式可以看成是一般函数的函数名被略去,返回值使用了一个
->
的形式表示。 - 唯一与普通函数不同的是增加了捕获列表。
[捕获列表](参数列表) -> 返回类型{函数体
}
auto Add = [](int a, int b) -> int {return a + b;
};
cout << Add(1, 2) << endl;
- 一般情况下,编译器可以自动推断出 lambda 表达式的返回值类型,所以我们可以不指定返回值类型。
- 但是如果函数体内有多个
return
语句时,编译器无法自动推断出返回值类型,此时必须指定返回值类型。
auto Add = [](int a, int b) {return a + b;
};
cout << Add(1, 2) << endl;
二、捕获列表
- 有时候,需要在匿名函数内使用外部变量,所以用捕获列表来传递参数。
- 根据传递参数的行为,捕获列表可分为以下几种:
- 值捕获。
- 与参数传值类似,值捕获的前提是变量可以拷贝,不同之处则在于:被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝。
int c = 30
- 与参数传值类似,值捕获的前提是变量可以拷贝,不同之处则在于:被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝。