我是靠谱客的博主 单纯大碗,最近开发中收集的这篇文章主要介绍C++11 lambda使用技巧小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在lambda中 一般的参数捕获有

1.[=]值传递

2.[&]引用传递

官方文档写传值只能读不能写,但传引用的话可以读和写。

如果增加mutable声明, 则可以修改值传递的对象。


例1

j = 10;
	auto by_val_1 = [j]()mutable{ j++; cout << "lambda j: " << j << endl; };
	by_val_1();
	cout << "j: " << j << endl;

结果

lambda j: 11
j: 10

这个例子 lambda中通过尝试修改变量j,并且输出修改后的值显示为11
但是 对于外部的变量j并没有任何改动

因而得知  值传递带mutable声明虽然可以改变lambda中的对象, 但不会对外部变量产生影响


例2

class Obj
{
public:

	void TestFunc() { cout << "TestFunc" << endl; }

};
Obj obj1;
auto by_ref_func = [&]() 
	{ 
		cout << "by ref lam" << obj1.m_n1 << endl;
		obj1.TestFunc();
	};
	by_ref_func();

auto by_va_func = [=]()
	{
		cout << "by val lam" << obj1.m_n1 << endl;
		obj1.TestFunc();
	};


以上的代码无法通过编译


在lambda内调用对象的普通函数 可以使用引用传递 

但普通的值传递不能  有两种办法解决

1 增加mutable声明

auto by_val_lambda_func = [=]()mutable
	{
		cout << "by val lam" << obj1.m_n1 << endl;
		obj1.TestFunc();
	};



2 目标调用函数声明为const
class Obj
{
public:

	void TestFunc() const { cout << "TestFunc" << endl; }

};




最后

以上就是单纯大碗为你收集整理的C++11 lambda使用技巧小结的全部内容,希望文章能够帮你解决C++11 lambda使用技巧小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部