Lambda
概念
Lambda函数,亦称为Lambda表达式、匿名函数等,是一种函数对象,Lambda函数可以让函数像普通变量一样进行赋值、传递、函数返回等操作。C++中的Lambda函数经常用来解决如下问题:
- 使得程序更加简洁,尤其对于一次性使用的函数。
- 有些库函数要求传递的参数是一个函数,但是你又不想写一个函数出来
- 使得函数可以自由流动,就像变量一样,这给函数式编程模式奠定了语法基础。
语法
定义
|
|
-
captruelist: 外部变量列表
-
params list: 形参列表
-
mutable: 是否可以修改外部变量。
- 默认情况下,Lambda函数总是一个const函数,mutable可以取消其常量性。
- 在使用mutable时,形参列表不可省略
-
exception: 异常设定
-
return type: 返回类型
- 可以不需要声明返回值,此时返回类型相当于使用decltyp根据返回值推断得到
-
function body: 函数体
|
|
mutable 用于取消 Lambda 表达式的常量性,使得按值捕获的变量可以在函数体内被修改,但修改的仅为变量副本,不会影响外部原变量。
|
|
noexcept 是 C++ 异常说明符,声明这个 Lambda 不会抛出任何异常
throw(类型):可以抛出指定类型异常
|
|
|
|
-
[a,b]从外部捕获变量a,b的变量,默认它们在Lambda函数内部是只读的
-
()圆括号内是Lambda函数的形参列表,此处为空,但不可省略。
-
->int 是Lambda函数的返回值类型,可以省略。
-
{}内部就是Lambda函数的具体代码实现
-
最右边的圆括号 () 是对Lambda函数调用的符号,不是Lamdba函数本身
|
|
|
|
&a 代表以引用模式捕获变量a,此时可以在Lambda函数体内修改变量a
捕获作用域内所有变量
|
|