栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++lambda表达式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++lambda表达式

先来一个简单的例子

#include
using namespace std;
int main()
{
	auto basic_lambda = [] {cout << "Hello Lambda" << endl; }; //定义简单的lambda表达式
	basic_lambda(); //调用
}


再来一个复杂的例子

#include
using namespace std;
int main()
{
	int x = 10; // 定义作用域内的x,方便下面的lambda捕捉
	auto add_x = [x](int a) { return a + x; }; // 传值捕捉x
	auto multiply_x = [&x](int a) {return a * x; }; //引用捕捉x
	cout < 


lambda 表达式定义了一个匿名函数,并且可以捕获一定范围内的变量。lambda 表达式的语法形式可简单归纳如下:

[ capture ] ( params ) opt -> ret { body; };

其中 capture 是捕获列表,params 是参数表,opt 是函数选项,ret 是返回值类型,body是函数体。
在上面例子二中,auto add_x = [x](int a) { return a + x; }; capture 捕获了上下文中的x

因此,一个完整的 lambda 表达式看起来像这样:

auto f = [](int a) -> int { return a + 1; };
std::cout << f(1) << std::endl;  // 输出: 2

lambda表达式最前面的方括号提供了“闭包”功能。每当定义一个lambda表达式以后,编译器会自动生成一个 匿名类 ,并且这个类重载了()运算符,我们将其称之为闭包类型(closure type)。在运行时,这个lambda表达式会返回一个匿名的闭包实例,并且该实例是一个右值。闭包的一个强大之处在于其可以通过传值或引用的方式捕捉其封装作用域内的变量,lambda表达式前面的方括号就是用来定义捕捉模式以及变量的lambda捕捉块。

C++ 中的lambda表达式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/528992.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号