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 表达式的主要内容,如果未能解决你的问题,请参考以下文章
KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )