C++11 lambda使用技巧小结
来源:互联网 发布:潘多网络黄彬 编辑:程序博客网 时间:2024/04/29 17:35
在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; }};
0 0
- C++11 lambda使用技巧小结
- C++11 lambda使用技巧小结(二)
- Eclipse开发C/C++之使用技巧小结,写给新手
- Eclipse开发C/C++之使用技巧小结
- Eclipse开发C/C++之使用技巧小结,写给新手
- Eclipse开发C/C++之使用技巧小结,写给新手
- Eclipse开发C/C++之使用技巧小结,写给新手
- Eclipse开发C/C++之使用技巧小结,写给新手
- Eclipse开发C/C++之使用技巧小结
- Ultraedit使用技巧小结
- GridView使用技巧小结
- Excel2010 使用技巧小结
- 会声会影使用技巧小结
- vim 使用技巧小结
- Ultraedit使用技巧小结
- PhpStorm使用技巧小结
- PhpStorm使用技巧小结
- [小结]Office使用技巧
- 小话设计模式(二十三)访问者模式
- 51Nod-1092 回文字符串(最长公共子序列变形)
- 【考研日记】:专业课
- HDU2059 龟兔赛跑 DP问题
- 面向对象_多态的成员访问特点级转型的理解
- C++11 lambda使用技巧小结
- Android基础02--Android布局
- 【37.48%】【hdu 2587】How far away ?(3篇文章,3种做法,LCA之ST算法(RMQ))
- 使用精确定时测试MFC中List Control写入速度
- Java学习总结第十七天Java类与对象笔试题(二)
- 仿百度地图自行车路线搜索和地图选点,覆盖物,途经点阅览,路线总长度计算等
- Android 自定义View--DragView
- 杭电OJ编码1002
- 透视几何与摄像机模型