[C++11]lambda表达式语法

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]lambda表达式语法相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码如下:

#include <iostream>
using namespace std;

void func(int x, int y)
{
	int a;
	int b;
	[=]() {
		int c = a;//使用了外部变量,[]里面加个 = 
		int d = x;

	};
}

int main()
{
	return 0;
}

lambda表达式的注意事项:

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以上图片来自下面链接:

https://subingwen.cn/cpp/lambda/

代码如下:

#include<iostream>
using namespace std;

void func(int x,int y)
{
	int a = 7;
	int b = 9;
	[=, &x]()mutable //因为b是只读的,我们无法修改它的值,所以加了mutable关键字,就可以修改了
	{
		int c = a;
		int d = x;
		b++;
		cout << "b = " << b << endl;
	}();

	cout << "b = " << b << endl;
}

int main()
{
	func(1,2);
	return 0;
}

测试结果:

在这里插入图片描述

3.返回值
很多时候,lambda表达式的返回值是非常明显的,因此在C++11中允许忽略lambda表达式的返回值。

代码如下:

#include<iostream>
using namespace std;

auto f = [](int a)->int
{
	return a + 10;
};

auto f1 = [](int a)
{
	return a + 10;
};

int main()
{
	cout << f(2) << endl;
	cout << f1(3) << endl;
	return 0;
}

测试结果:

在这里插入图片描述

代码如下:

//OK,可以自动推导出返回值类型
auto f = [](int a)
{
	return a ;
};

//error,不能推导出返回值类型
auto f1 = []()
{
	return {1,2};//初始化列表作为函数返回值
};

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以上图片来自下面链接:

https://subingwen.cn/cpp/lambda/

代码如下:

#include <iostream>
#include <functional>
using namespace std;

void func(int x, int y)
{
	int a;
	int b;
	using ptr = void(*)(int);
	ptr p1 = [](int x)
	{
		cout << "x = " << x << endl;
	};
	p1(11);


	//error 捕获了外部变量,所以不能看做函数指针
	/*ptr p2 = [=](int x)
	{
		cout << "x = " << x << endl;
	}*/

	function<void(int)>fff = [=](int x)
	{
		cout << "x = " << x << endl;
	};

	fff(1);

	//绑定
	function<void(int) > fff01 = bind([=](int x)
	{
		cout << "x = " << x << endl;
	}, placeholders::_1);

	fff01(12);

}

int main()
{
	func(12,143);
	return 0;
}

测试结果:

在这里插入图片描述

以上是关于[C++11]lambda表达式语法的主要内容,如果未能解决你的问题,请参考以下文章

C++11 ——— lambda表达式

C++11——lambda表达式

C++11lambda表达式精讲

C++lambda表达式

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

[C/C++11语法]_[初级]_[lamba 表达式介绍]