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

C++ Lambda表达式

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

C++ Lambda表达式

lambda表达式/lambda函数/匿名函数
语法:[capture list](parameters)[mutable][throw()] -> return-type {body}
捕获列表:在C ++规范中也称为Lambda导入器,捕获列表总是出现在Lambda函数的开
        始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码
        是否是Lambda函数。捕捉列表不允许变量重复传递。
参数列表:与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号“()”
        一起省略。
可变规格:mutable修饰符,默认情况下Lambda函数总是一个const函数,mutable可
        以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。
异常说明:用于Lamdba表达式内部函数抛出异常。
返回类型:不需要返回值的时候也可以连同符号”->”一起省略,在返回类型明确的情
        况下,也可以省略该部分,让编译器对返回类型进行推导。
函数体:内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。
附:1、除了可以使用参数以外,Lambda函数可以通过捕获列表访问一些上下文中的数据。
   2、lambda表达式不能有默认参数。
   3、所有参数必须有参数名。
   4、不支持可变参数(以传值方式捕获外部变量,则在Lambda表达式函数体中不能修
       改该外部变量的值)。
例://不捕获变量
	auto fun = ([] {
		std::cout << "Hello World!" << std::endl;
		}
	);
	fun();
	//值传递方式捕获指定变量
	int a = 10;
	auto fun = ([a] {
		std::cout << a << std::endl;
		}
	);
	fun();
	//值传递方式捕获父作用域变量
	int a = 10;
	int b = 20;
	auto fun = ([=] {
		std::cout << a << std::endl;
		std::cout << b << std::endl;
		}
	);
	fun();
	//引用传递方式捕获指定变量
	int a = 10;
	auto fun = ([&a] {
		return ++a;
		}
	);
	int b = fun();
	std::cout << b << std::endl;
	//引用传递方式捕获父作用域变量(包括this指针)
	int a = 10;
	int b = 20;
	auto fun = ([&] {
		a++;
		b++;
		}
	);
	fun();
	std::cout << a << std::endl;
	std::cout << b << std::endl;
	//拷贝+引用,注意变量的重复传递(例如:[=,b])
	int a = 10;
	int b = 20;
	auto fun = ([=, &b] {
		std::cout << (b += a) << std::endl;
		}
	);
	fun();
	//引用+拷贝,注意变量的重复传递(例如:[&,&b])
	int a = 10;
	int b = 20;
	auto fun = ([&, b] {
		std::cout << (a += b) << std::endl;
		}
	);
	fun();
	//形参接收
	auto fun = ([](int a, int b) -> int {
		return a > b ? a : b;
		}
	);
	int c = fun(10, 20);
	std::cout << c << std::endl;
	//可变规格(默认情况下lambda函数总是一个const函数,mutable可以取消其常
      量性)
	int a = 0;
	int b = 0;
	[=](int c) mutable {
		a = ++b + c;
		std::cout << a << std::endl;
		std::cout << b << std::endl;
	}(4);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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