【C++11】lambda表达式

文章介绍了C++中的lambda表达式,它用于定义匿名函数,可以捕获周围作用域的变量。lambda表达式强调了声明式编程的可读性和可维护性,同时也因其简洁性提高了开发效率。捕获列表允许按值或引用捕获变量,包括全量捕获、值捕获和引用捕获等不同方式。文章通过示例展示了如何在函数中使用lambda表达式以及不同的编写形式。
摘要由CSDN通过智能技术生成

lambda表达式定义了一个匿名函数,可以捕获一定范围内的变量。其本质是仿函数。

优点:

1.声明式编程,好的可读性和可维护性;

2.简洁,避免代码膨胀,功能分散,提高生产率;

3.就地功能闭包,灵活。

[capture](params)opt->ret{body;};
//[捕获列表](参数表)函数选项->返回值{函数体};

捕获列表:

[]不捕获任何变量
[&]捕获外部作用域的所有变量,引用方式捕获
[=],值捕获,(类类型调用拷贝构造)有一个值副本,不可改
[=,&foo],foo引用捕获,其他值捕获
[&bar]按值捕获bar变量,其他不捕获
[this]捕获当前类种的this指针

 捕获使用于当前域的变量,如:

void fun(int x)
{
	auto fa = [=]()->void{};//捕获针对于fun函数内的变量
	fa();
}

全局变量没有捕获的概念(都可以用)

捕获的值和传入的值可以在匿名函数中使用,如下:

void funa(int x, int y)
{
	int z = x + y;
	auto fa = [](int a)->void {cout << a << endl; };
	fa(10);
	auto fb = [x, z]()->void {int a = z + x; cout << a << endl; };//值捕获不能改,const
	fb();
}
int main()
{
	funa(10, 20);
	return 0;
}

几种写法:

//让指针指向这个匿名函数
auto f = [](a,b)->int{return a+b};

//直接赋值
[](a,b)->int{return a+b}(10,20);

//简写,return自己推导返回类型
auto f = [](a,b){return a+b}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曦樂~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值