c++ 11之 lambda表达式的使用
Posted 小哈龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 11之 lambda表达式的使用相关的知识,希望对你有一定的参考价值。
一.使用示例
#include <iostream>
#include <string>
#include <stdio.h>
#include <functional>
using namespace std;
//lambda 表达式的第一种用法
void LambdaUseOne()
int a = 1, b = 2, c = 3;
auto retVal = [=, &a, &b]()
printf("inner c[%d]\\n", c);
a = 10;
b = 20;
return a + b;
;
printf("sum[%d]\\n", retVal()); //类似于函数对象的调用
printf("a[%d] b[%d] c[%d]\\n", a, b, c);
//lambda 表达式的第二种用法
void LambadaUseTwo(int a,std::function<int __stdcall(const int&)> one)
int result = one(a); //通过函数参数传入lambda表达式(function类型)
cout << result << endl;
//lambda 表达式的第三种用法
void LambdaUseThree()
int a = 1, b = 2, c = 3;
[=, &a, &b]()
printf("inner c[%d]\\n", c);
a = 10;
b = 20;
return a + b;
(); //直接在函数题后添加括号() 表示直接调用
int main()
//lambda 表达式的第一种用法
LambdaUseOne();
cout << endl;
//lambda 表达式的第二种用法
int b = 3;
LambadaUseTwo(2, [=](int a)->int
return a + b;
);
//lambda 表达式的第三种用法
LambdaUseThree();
system("pause");
return 0;
二.lambda表达式概述
[ capture ] ( params ) opt -> ret body; ;
以下描述摘自网络:https://blog.csdn.net/weixin_43055404/article/details/103299156
其中carpture是捕获列表,params是参数,opt是选项,ret则是返回值的类型,body则是函数的具体实现。
1.捕获列表描述了lambda表达式可以访问上下文中的哪些变量。
[] :表示不捕获任何变量
[=]:表示按值捕获变量
[&]:表示按引用捕获变量
[this]:值传递捕获当前的this
2.params表示lambda的参数,用在中。
3.opt表示lambda的选项,例如mutable,后面会介绍一下mutable的用法。
4.ret表示lambda的返回值,也可以显示指明返回值,lambda会自动推断返回值,但是值得注意的是只有当lambda的表达式仅有一条return语句时,自动推断才是有效的。
以上是关于c++ 11之 lambda表达式的使用的主要内容,如果未能解决你的问题,请参考以下文章