查看Reference
是什么:
Lambda expressions is a way to define an anonymous functions.
怎么用:
以上3 4 5 都可以被省略掉
- 用来捕获函数体外面的变量的从句(capture clause)
- 表明返回变量的type
- 输入变量
- 函数体
捕获从句的使用:
&
表示获得函数体外的变量的引用,=
表示获得函数体外变量的值。
比如有变量total
和变量factor
。
当想用捕获total
的引用和factor
的值,可以用以下方法:
[&total, factor]
[factor, &total]
[&, factor]
[factor, &]
[=, &total]
[&total, =]
但是捕获从句的前后两句不能重合使用,比如
[&, &i]
则会保持,因为前面的&表示默认用捕获外界变量的引用。也就是说捕获从句之所以存在两个部分是可以方便使用不同的捕获方式。
使用例子
用于计算:
int main()
{
int m = 0;
int n = 0;
[&, n] (int a) mutable { m = ++n + a; }(4);
cout << m <<" "<< n << endl;
}
输出:5 0
用于作为比较函数,在std::sort()
被调用时使用:
vector<int> s = {2, 4, 6, 8, 1};
std::sort(s.begin(), s.end(), [](int a, int b) {
return b < a;
});