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表达式的使用的主要内容,如果未能解决你的问题,请参考以下文章

c++中lambda表达式用法

C++ 11 lambda表达式

C++中Lambda表达式浅析

C++之lambda表达式的介绍

c++中lambda表达式用法

c++的lambda使用注意事项,可能导致的崩溃问题分析