C++新特性 lambda表达式与匿名函数

//C++新特性 lambda表达式与匿名函数
/*
	Lambda是C++11最重要的特性之一,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是一个函数,但是
	又不想费力去命名一个函数的情况下使用的。这样的常见其实很多,所以匿名函数几乎是现代编程语言的标配
	[捕获列表] (参数列表) mutable(可选) 异常属性(throw) -> 返回值类型
	{
		函数体
	}
	[caputrue] (params) opt ->ret
	{
		body
	}	


     在最适合lambda表达式的场景,如果你一定要用class表达,那么你需要为你的类定义一个十分臃肿的构造函数,传进去一大堆参数,然后返回一个值就把这个对象扔了。然而用lambda表达式的话,你只要把这些捕获为闭包就行了
*/

int foo(int a)
{
	std::cout << a << std::endl;
	return a;
}

int main()
{
	//没有名字的表达函数(匿名函数)
	int b = 1;
	//[]捕获列表 ()参数列表 ->返回值类型
	int c = [](int a, int b) ->int
	{
		return a + b;
	}(1, 2);


	//函数传递匿名函数
	foo([](int a,int b) ->int
		{
			return a+b;
		}(1,2)
	);
	//将匿名函数存储到f
	auto f=[](int a, int b) ->int
	{
		return a + b;
	};
	c = f(1, 2);

	//两个lambda表达式 ,内联嵌套,函数编程
	int c = [](int n)
			{
				return [n](int x){
					return x + n;
				}(1);
			}(2);
	//不直接使用
	auto f01 = [](int n)
	{
		return [n](int x){
			return x + n;
		};
	};

	int c = f01(1)(2);


    int t = 10;
	//按值捕获对象
	[t]()
	{
		std::cout << t << std::endl;  //按值捕获在调用时,在调用时参数值多少就是多少
	};
	t = 11;

	//按引用捕获
	[&t]()
	{
		t = 11;
	};   //可以修改值
	//捕获所有变量的值,表示安值捕获
	[=]()
	{
	
	};
	//捕获所有变量的值,表示安引用捕获
	[&]()
	{

	};


	while (true)
	{

	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值