C++新特性10_lambda表达式/匿名函数(Lambda 表达式就是为了用于复用率很低的函数;函数编程:结果取决于内部参数;adder=λn.(λx.(+ x n));利用auto推测返回值类型)

Lambda** 表达式 是一个源自阿隆佐·邱奇(Alonzo Church)——艾伦·图灵(Alan Turing)的老师——的术语。邱奇创立了 λ 演算 ,后来被证明和图灵机是等价的。

Lambda 表达式是 C++ 11 中最重要的新特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。

个人总结:Lambda 表达式就是为了用于复用率很低的函数。
Lambda 表达式是 C++ 11 中最重要的新特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的(复用率很小的函数)。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。

1.Lambda 表达式基础

1.1 Lambda 表达式的基本语法

[捕获列表](参数列表) mutable(可选) 异常属性(即异常处理功能) -> 返回类型 {
    // 函数体
}
[ caputrue ] ( params ) opt -> ret { body; };

1.2 举例

int foo(int a, int b) {
	return a + b;
}

int main() {

	//lambda表达式就是匿名函数(没有名字的函数)
	//[]捕获列表;()参数列表;->int返回值;{}函数体;后的()代表传参
	int c=[](int a, int b)->int {
		//函数体
		return a + b;
	}(1,2);
}

1.3 性质

  • Lambda 表达式以一对中括号开始。

  • 跟函数定义一样,我们有参数列表

  • 跟正常的函数定义一样,我们会有一个函数体,里面会有 return 语句

  • Lambda 表达式一般不需要说明返回值(相当于 auto);有特殊情况需要说明时,则应使用箭头语法的方式

  • 每个 lambda 表达式都有一个全局唯一的类型,要精确捕捉 lambda 表达式到一个变量中,只能通过 auto 声明的方式

2. lambda表达式的调用

前面的匿名函数只能在生成时使用,而想要复用怎么处理呢?

	//函数体的整体可以存储起来,auto自动推导函数体类型
	auto f = [](int a, int b)->int {
		//函数体
		return a + b;
	};
	//lambda的调用
	c = f(1, 2);

3. 两个lambda的嵌套写法

//函数式编程:结果只取决于内部的参数,多线程,并发
int c=[](int n) {
		return [n](int x) {
		//内部表达式捕获外部的n的值
			return n + x;
		}(1);
	}(2);

	cout << c << endl;

结果:3

4. 两个lambda的嵌套写法的调用

	//两个lambda的嵌套写法的调用
	//adder=λn.(λx.(+ x n))
	auto f = [](int n) {
		return [n](int x) {
			//内部表达式捕获外部的n的值
			return n + x;
		};
	};

	c = f(1)(2);//1的结果又将2作为参数

5. 学习视频地址:lambda表达式/匿名函数

6. 学习笔记:lambda表达式/匿名函数笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值