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

lambda表达式浅析【C++学习笔记】

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

lambda表达式浅析【C++学习笔记】

lambda表达式浅析【C++学习笔记】 基本用法:
auto f = []()->int 
	{
		
	};

捕获列表:

  • [] : 不捕获任何变量

  • [变量名] : 表示值捕获,不可修改

  • [=] :按值捕获所有变量,不可修改

  • [&] : 按引用捕获可以修改

  • [this] : 在类中捕获,捕获当前类的this指针,如果使用 = & 捕获,则默认捕获this指针

  • [& 变量名] :按引用捕获该变量

  • [ = , & 变量名] ; 按值捕获所有变量,但是按引用捕获变量名变量,按引用捕获的变量,每个前面都有写一个&

  • [ &,变量名] : 按引用捕获所有变量,但是按值捕获变量名变量

lambda表达式延迟调用易错点
int a = 12;
	auto f = [=]() ->int 
	{
		return a;
	};
	a = 99;
	cout << f() << endl;

输出:

为什么输出不是99呢?

因为在遇到auto f = [=]() ->int这一行时,a的值就已经被复制到lambda表达式中了

要避免这个错误可以使用按引用捕获

lambda表达式类型

lambda表达式是闭包类型,可以理解成函数中的函数

编译器会为每个lambda表达式生成一个类,和一个可调用类对象

lambda表达式用法介绍
vector vec{ 12,23,435,56,76 };
	int isnums = 9;
	for_each(vec.begin(), vec.end(), [=](int& val)
		{
			val -= isnums;
		});
	for (auto value : vec)
	{
		cout << value << endl;
	}
广义lambda捕获

解决lambda捕获依赖于类对象问题

将m_object复制到闭包里面来

[ temp = m_object]()
{
    return temp;

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

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

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