Lambda表达式的C++表达式

 我来答
斤斤FJpn1
推荐于2017-10-21 · 超过45用户采纳过TA的回答
知道答主
回答量:147
采纳率:100%
帮助的人:89.6万
展开全部

ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:
[capture list] (parameter list) ->return type { function body }
其中除了“[ ]”(其中捕获列表可以为空)和“复合语句”(相当于具名函数定义的函数体),其它都是可选的。它的类型是唯一的具有成员operator()的非联合的类类型,称为闭包类型(closure type)。
C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型。
例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数: boolcompare(int&a,int&b){returna>b;//降序排序}然后,再这样调用: sort(a,a+n,compare);然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写: sort(a,a+n,[](inta,intb){returna>b;});//降序排序这样一来,代码明显简洁多了。
由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导: autof=[](inta,intb){returna>b;};和其它语言的一个较明显的区别是Lambda和C++的类型系统结合使用,如: autof=[x](inta,intb){returna>x;});//x被捕获复制intx=0,y=1;autog=[&](intx){return++y;});//y被捕获引用,调用g后会修改y,需要注意y的生存期bool(*fp)(int,int)=[](inta,intb){returna>b;});//不捕获时才可转换为函数指针Lambda表达式可以嵌套使用。
即将出版的ISO C++14支持基于类型推断的泛型lambda表达式。上面的排序代码可以这样写: sort(a,a+n,[](constauto&a,constauto&b){returna>b;});//降序排序:不依赖a和b的具体类型因为参数类型和函数模板参数一样可以被推导而无需和具体参数类型耦合,有利于重构代码;和使用auto声明变量的作用类似,它也允许避免书写过于复杂的参数类型。特别地,不需要显式指出参数类型使使用高阶函数变得更加容易。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式