概述
在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
但是 对于外部的变量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();
};
class Obj
{
public:
void TestFunc() const { cout << "TestFunc" << endl; }
};
最后
以上就是单纯大碗为你收集整理的C++11 lambda使用技巧小结的全部内容,希望文章能够帮你解决C++11 lambda使用技巧小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复