C++的使用小教程3——Lambda函数与表达式

C++的使用小教程3——Lambda 函数与表达式

lambda表达式可以用于简洁的表达一个函数,虽然不太会用,但是之后看代码的时候可能会遇见,还是学习一下为妙。
在这里插入图片描述

1、什么是Lambda函数

C++11提供了对匿名函数的支持,匿名函数被称为 Lambda 函数,也可以被称作Lambda表达式。
具体的形式如下:

[capture](parameters)mutable->return-type{body}

其中存在四个参数,分别是:
1、[capture] :capture是捕捉列表。捕捉列表是Lambda表达式的开头。
2、(parameters):parameters是参数列表。和C++中的普通函数参数意义一样。
3、mutable:当我们在参数列表后面注明了“mutable”关键字之后,可以取消其const常量的性质。
4、->return-type:return-type是函数的返回值类型。和C/C++中的普通函数返回值类型的性质一样。当不需要返回值时,可以去掉这一部分。
5、 {statement}:statement是函数体。是函数的具体执行过程。

2、简单Lambda函数使用示例

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;

	auto sum = [](int p1, int p2)mutable->int{return (p1 + p2); };

	cout << sum(a,b) <<'\n';
	system("pause");
	return 0;
}

结果为:

20
请按任意键继续. . .

3、捕捉列表

捕捉列表可以填入不同的值。
1、填入 = 时,代表通过值传递捕捉父作用域的变量

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;
	auto fun1 = [=] {return a + b; };   //值传递捕捉父作用域变量
	cout << fun1() <<'\n';
	system("pause");
	return 0;
}

输出为:

20
请按任意键继续. . .

2、填入 & 时,代表通过引用传递捕捉父作用域的变量

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;
	auto fun2 = [&](int c) {b = a + c; a = 5; };  
	fun2(5); 
	cout << "a = " << a << " b = " << b << endl;
	system("pause");
	return 0;
}

结果为:

a = 5 b = 15
请按任意键继续. . .

3、填入[ = , &b ]时,代表除去b外,其他值以值传递的方式捕捉
以值传递捕捉的变量,在函数体里如果要修改,要加mutaple,因为默认使用const修饰。
在本例中,a变量以值传递的方式捕捉,需要加上mutable才可以修改,否则会报错。

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 10;
	auto fun3 = [=, &b](int c)mutable { b = a + c; a = 5; };    //以值传递捕捉的变量,在函数体里如果要修改,要加mutaple,因为默认const修饰
	fun3(3);
	cout << "a = " << a << " b = " << b << endl; 
	system("pause");
	return 0;
}

结果为:

a = 10 b = 15
请按任意键继续. . .
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bubbliiiing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值