C++ lambda 表达式
Posted 匆忙拥挤repeat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ lambda 表达式相关的知识,希望对你有一定的参考价值。
lambda 表达式
形式:[capture_list](args_list) -> returnType {}
- capture_list 是要捕获的 外部局部变量列表。
1. 使用变量值,是值拷贝,默认不可修改。若需要在函数体内部可以改变值,在参数列表后加上 mutable。即使修改了,也不会影响原外部的值。
2. 使用引用,如 &a。引用捕获
。 引用依赖的若是const引用,则不能修改,反之可通过引用修改。
3. 只使用 一个&
或=
,前者是引用捕获,后者是值捕获。在函数体中,直接使用外部局部变量,会自动推断捕获列表。隐式捕获
。
4. 可以混用 显式和隐式捕获。当混用时,第一个元素必须是一个 &或=
。 - args_list 参数列表
- returnType 返回类型。
若函数体内只有一条return语言,可以省略 -> returnType 声明。
当还有其它语句时,需要声明 -> returnType 。
void testLambda1() {
vector<int> vec = {1,20,3,4,5};
auto res = find_if(vec.begin(), vec.end(), [](int it) -> bool { //可省略 -> bool,会自动推断。
return it % 2 == 0;
});
cout << *res << endl; //输出20
}
// lambda要使用外部局部变量,必须定义在[]列表中,以逗号分隔。
void testLambda2() {
vector<int> vec = {1,20,3,4,5};
int temp = 3;
auto res = find_if(vec.begin(), vec.end(), [temp](int &it) -> bool {
return it == temp;
});
cout << *res << endl;
}
// 值拷贝外局部变量,若需要在函数体内部可以改变值,在参数列表后加上 mutable
void testLambda3() {
auto mut = [temp] () mutable {
return ++temp;
};
cout << mut() << temp << endl;
}
以上是关于C++ lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章