C++中的Lambda表达式用来做什么,怎样使用?
导读:这篇文章我们来了解C++中的Lambda表达式的内容,下文对Lambda表达式的作用和使用都有很详细的介绍,有需要的朋友可以参考,感兴趣的朋友接下来就跟随小编来了解看看吧! 概述 C++ 11 中的 Lambda 表达式用于定义并创建...
这篇文章我们来了解C++中的Lambda表达式的内容,下文对Lambda表达式的作用和使用都有很详细的介绍,有需要的朋友可以参考,感兴趣的朋友接下来就跟随小编来了解看看吧!
概述
C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:
[捕获列表] (参数) mutable 或 exception 声明 ->
返回值类型 {
函数体}
//计算两个值的和
auto func = [](int a, int b) ->
int{
return a+b;
}
;
//当返回值的类型是确定时,可以忽略返回值
auto func = [](int a, int b){
return a + b;
}
;
//调用
int sum = func(1, 3);
语法分析
捕获列表
Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:
class Labmda
{
public:
const int test;
Labmda(int value):test(value)
{
}
public:
int run(int a, int b)
{
return a + b + test;
}
}
int main()
{
int test = 10;
auto func = Labmda(test);
int sum = func.run(1, 3);
}
//使用Lambda 表达式的写法
int main()
{
int test = 10;
auto func = [test](int a, int b){
return a + b + test;
}
;
int sum = func(1, 3);
}
捕获列表有以下格式:
| 格式 | 描述 |
|---|---|
| [] | 不带任何参数 |
| [=] | Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递 |
| [& ] | Lambda表达式之前的局部变量,包括所在类的this,变量按引用方式传递 |
| [this] | Lambda表达式所在类的this |
| [a] | Lambda表达式之前的局部变量a的值,也可以传入多个值,如[a , b] |
| [& a] | Lambda表达式之前的局部变量a的引用 |
关键字声明
关键字声明一般都很少用到,也不建议随便使用,可以忽略不计。
mutable
当捕获列表以值的方式传递时有效,加上此关键字后,可以修改Lambda类成员(带const修饰符)。比如:
int test = 10;
//编译报错,test成员不能修改
auto func = [test](int a, int b){
test = 8;
return a + b + test;
}
;
//编译正常
auto func = [test](int a, int b)mutable {
test = 8;
return a + b + test;
}
;
这里需要注意的是:Lambda类成员test修改之后,并不会改变外部int test的值。
exception
exception 声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用 throw(int)
示例
捕获列表按值传递
int test = 10;
auto func = [=](int a, int b){
return a + b + test;
}
;
auto func2 = [test](int a, int b){
return a + b + test;
}
;
int sum = func(1, 3);
//sum等于14
这里需要注意的是func表达式中test的值只更新到表达式之前:
int test = 10;
auto func = [=](int a, int b){
return a + b + test;
}
;
test = 5;
int sum = func(1, 3);
//sum还是等于14
捕获列表按引用传递
int test = 10;
auto func = [&
](int a, int b){
test = 5;
return a + b + test;
}
;
auto func2 = [&
test](int a, int b){
test = 5;
return a + b + test;
}
;
int sum = func(1, 3);
//sum等于9,test等于5
这里func表达式中test的值就能随时更新:
int test = 10;
auto func = [&
](int a, int b){
return a + b + test;
}
;
test = 5;
int sum = func(1, 3);
//sum等于9,test等于5
总结
关于C++中的Lambda表达式的内容就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,对大家学习和理解Lambda表达式会有一定的帮助。最后,想要了解更多大家可以关注其它的相关文章。
文本转载自脚本之家
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C++中的Lambda表达式用来做什么,怎样使用?
本文地址: https://pptw.com/jishu/655318.html
