c++11 lambda表达式

时间:2022-03-22 18:43:07

直接调用和用对象调用

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

int main() 
{
	//定义并直接调用
	[]{cout << "hello1" << endl;}();

	//定义并传递给对象,用对象调用
	auto l = []{cout << "hello2" << endl;};
	l();

	getchar();
	getchar();
	return 0;
}

有参数的lambda表达式

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

int main() 
{
	//有参数的lambda
	auto l1 = [](const string str)
	{
		cout << str << endl;
	};
	l1("test1");
	l1("test2");

	getchar();
	getchar();
	return 0;
}

指定返回值类型的lambda表达式

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

int main() 
{
	//指定返回类型的lambda
	auto l2 = []()->int
	{
		return 42.1;
	};
	cout << l2() << endl;

	getchar();
	getchar();
	return 0;
}
参数类型

[=]意味着外部作用域是以by value方式传递给lambda.因此当这个lambda被定义时,你可以读取所有可读数据,但不能改动它们.[&]意味着外部作用域以by reference方式传递给lambda.因此当这个lambda被定义时,你对所有数据的改写动作都是合法的,前提是你拥有涂写它们的权力

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

#define L_VALUE(a) #a<<"="<<a

int main() 
{
	int x = 0;
	int y = 42;
	auto qqq = [x, &y] ()
	{
		cout << L_VALUE(x) << endl;
		cout << L_VALUE(y) << endl;
		++y;
	};
	x = y = 77;
	qqq();
	qqq();
	cout << "final " << L_VALUE(y) << endl;

	getchar();
	getchar();
	return 0;
}

c++11 lambda表达式

指定mutable关键字后,by value传入的参数会拥有修改权限,但是修改不会影响外部区域

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

#define L_VALUE(a) #a<<"="<<a

int main() 
{
	int x = 0;
	auto qqq = [x] () mutable
	{
		cout << L_VALUE(x) << endl;
		++x;
	};
	x = 77;
	qqq();
	qqq();
	cout << "final " << L_VALUE(x) << endl;

	getchar();
	getchar();
	return 0;
}
c++11 lambda表达式