博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11 里lambda表达式的学习
阅读量:6546 次
发布时间:2019-06-24

本文共 1493 字,大约阅读时间需要 4 分钟。

最近看到很多关于C++11的文档,有些是我不怎么用到,所以就略过去了,但是lambda表达式还是比较常用的,其实最开始学习python的时候就觉得lambda这个比较高级,为什么C++这么弱。果然C++增加这个东西。

语法

[ capture ] ( params ) mutable exception attribute -> ret {

body }      (1)

[ capture ] ( params ) -> ret {

body }                                              (2)

[ capture ] ( params ) {

body }                                                       (3)

[ capture ] { body }                                                                       (4)

 

解释

capture     -     指定哪些在函数声明处的作用域中可见的符号将在函数体内可见。

                      符号表可按如下规则传入:
              [=,&b],按引用捕获b,其他局部变量都按值捕获
              [this],按值捕获了this指针
              [&] 按引用捕获在lambda表达式所在函数的函数体中提及的全部自动储存持续性变量
              [=] 按值捕获在lambda表达式所在函数的函数体中提及的全部自动储存持续性变量
              [] 什么也没有捕获
params     -     参数列表,与命名函数一样
ret     -     返回值类型。如果不存在,它由该函数的return语句来隐式决定(或者是void,例如当它不返回任何值的时候)
body     -     函数体

 

例子

 

/*[] 什么也没有捕获*/auto x = [](){cout<<"Lambda is woring"<

 

/*[=] 按值捕获*/ int n=3;int m=4;;string s="many";auto a= [n](string &s) mutable {n++;return s.size()>n;} ; a(s);cout<
<
m;};cout<<"m="<
<<", n="<
<

 这个地方不知道为什么必须用mutable,不然编译不过。可能是值捕获的关系吧。

 

/*[&] 按引用捕获*/int n=3;string s="many";auto b= [&n](string &s) {n++;return s.size()>n;};b(s);cout<
<

 

/*[=, &foo] 除了foo引用捕获,其他局部变量全部值捕获*/int n=3;int m=4;string s="many";auto c = [=,&n](string &s) mutable {m++;n++; return s.size()>m;};c(s);cout<<"m="<
<<", n="<
<

 

 

/*[this],按值捕获了this指针 */class A{private:    int z;public:    A(){z=0;}    void fun(int m)    {        auto a = [this](int m) {
return this->z+m;}; cout<
<
fun(5); //5 return 0;}

 

 

                      

转载于:https://www.cnblogs.com/streakingBird/p/3830263.html

你可能感兴趣的文章
阿里云Centos配置iptables防火墙
查看>>
UML类图几种关系的总结
查看>>
PHP面试题汇总
查看>>
LeetCode (11): Container With Most Water
查看>>
【技巧】easyUI的datagrid,如何在翻页以后仍能记录被选中的行
查看>>
经过强制类型转换以后,变量a, b的值分别为( )short a = 128; byte b = (byte) a;
查看>>
ubuntu下msmtp+mutt的安装和配置
查看>>
QLabel显示图片,图片可以自适应label的大小
查看>>
BZOJ3994:[SDOI2015]约数个数和——题解
查看>>
3、EJB3.0开发第一个无会话Bean和客户端(jboss4.2.3)
查看>>
git fetch & pull详解
查看>>
boost_1.63.0编译VS2013
查看>>
jQuery 插件-(初体验一)
查看>>
PHP语言 -- Ajax 登录处理
查看>>
基于js的CC攻击实现与防御
查看>>
我的家庭私有云计划-19
查看>>
项目实践中Linux集群的总结和思考
查看>>
关于使用Android NDK编译ffmpeg
查看>>
监控MySQL主从同步是否异常并报警企业案例模拟
查看>>
zabbix从2.2.3升级到最新稳定版3.2.1
查看>>