C++Lambda表达式

作者: shad0w_walker(admin) 分类: 基础知识 发布时间: 2017-02-26 19:43 ė 6 没有评论

Lambda表达式用于创建匿名函数,是C++11增加的一个新特性,编译时指定语言级别为C++11即可使用,例如在g++中加入编译参数-std=c++11。

C++的Lambda表达式格式为[1](2)->3{4}。中括号内1部分为对外部作用域变量的捕获设定,小括号内2部分为函数的传入参数,箭头指向的3部分为函数的返回值类型,大括号内4部分为函数的内容,整个表达式的类型为std::function。

[]部分称为Lambda表达式的引入符,表示Lambda表达式的开始,[]内部可以为空也可以有内容,其术语叫做闭包,具体有如下这些情况:

1、[],表示不捕获外部的任何变量

2、[=],以值传递的方式捕获外部变量

3、[&],以引用的方式捕获外部变量

4、[=, &a],以值传递的方式捕获外部变量,而变量a以引用方式

5、[&, a],以引用的方式捕获外部变量,而变量a以值传递方式

6、[a, &b],以值传递的方式捕获变量a,引用的方式捕获变量b

()内为匿名函数的传入参数,就像建立一般函数时小括号内的写法一样

->后面就是返回值类型,这部分可以省略,因为C++11可以根据自动类型推断得到这个函数的返回值类型

{}也和一般函数一样

网上找来的两个例子:

上述代码的运行结果为4.5和4.5,因为规定了按引用传参

上述代码的运行结果为4.5和1.0,因为规定了按值传参。但是需要注意的是,C++ 11 标准说,如果以传值的形式捕获外部变量,那么,lambda 体不允许修改外部变量,对 f0 的任何修改都会引发编译错误。又但是,如果在lambda体前加mutable修饰,就可以在内部修改f0的值了。

 

具体的用法:

如果要建立一个返回int数绝对值的的函数,可以这样定义:

 

这样F(-1)的值就是1了。

还例如在一个按照绝对值从小到大排序的std::sort函数中,可以这样使用Lambda表达式:

 

本文出自shad0w_walker,转载时请注明出处及相应链接。

本文永久链接: https://www.sdwalker.com/archives/651.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部