Lambda表达式(匿名函数、Lambda函数)是现代C++在C ++ 11和更高版本中的一个新的语法糖,可以让我们快速便捷的创建一个函数。
[ capture-list ] ( params ) mutable exception attribute -> return-type { body }
capture-list:捕获列表,一般在Lambda表达式开头,捕获上下文中的变量,用逗号分隔。
params:参数列表,函数所需参数,写法同函数参数,但是不支持默认参数。若没有参数可连同"()"直接省略。
mutable:可变规格(修饰符),当捕获列表是以复制的形式捕获时,默认复制值为const,若指定mutable则可取消其常量性。
exception:异常说明,用于函数内部抛出异常。
attribute:声明属性。
return-type:返回值类型,可省略。
body:函数体。
捕获列表说明:lambda表达式的捕获列表精细控制了lambda表达式能够访问的外部变量,以及如何访问这些变量。
1).[]不捕获任何变量。
2).[&]以引用的方式捕获所有变量。
3).[=]以拷贝的方式捕获所有变量。
4).[=,&foo]按值捕获外部作用域中所有变量,并按引用捕获foo变量。
5).[var]表示值传递方式捕获变量var。
6).[this]捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限。如果已经使用了&或者=,就默认添加此选项。捕获this的目的是可以在lamda中使用当前类的成员函数和成员变量。
auto lambda_test = [] {std::cout << "Hello, World!\n";}; lambda_test();
上例将打印字符的lambda函数赋给了lambda_test,然后直接调用函数。运行可得到结果"Hello,World!"
Lambda应用场景:当我们需要使用一次性函数时我们可以直接使用lambda函数,避免工程文件定义过多的非常用函数。
参考文章:
https://paul.pub/cpp-lambda-function-bind/
https://blog.csdn.net/qq_37085158/article/details/124626913?spm=1001.2014.3001.5506
标签:11,函数,捕获,C++,表达式,Lambda,浅析,变量,lambda From: https://www.cnblogs.com/Explosion556/p/17274219.html