匿名函数

Lambda表达式(匿名函数)是一个可调用的代码单元,拥有捕获所在用户域中变量的能力,能够将函数作为对象一样使用,通常用来实现回调函数,代理等功能。Lambda表达式是函数式编程的基础,C++11引入了Lambda则弥补了C++在函数式编程方面的空缺。

基本语法

[捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 {
//函数体
}

如果函数体内有多个return语句时,编译器无法自定推断出返回类型,此时必须指定返回类型。

捕获列表

有时候,需要在匿名函数内使用外部变量,所以用捕获列表来传递参数。根据参数的行为,捕获列表可分为:

  1. 值捕获

    与参数传值类似,值捕获的前提是变量可以拷贝,不同之处是,被捕获的变量在lambda表达式被创建时拷贝,而非调用时拷贝。([变量名])

  2. 引用捕获

    与引用传参类似,引用捕获保存的是引用,原值会发生变化。([&变量名])

  3. 隐式捕获

    在捕获列表中写一个&或=向编译器声明采用引用捕获或者值捕获

  4. 空捕获列表

    []为空,表示Lambda表达式不能使用所在函数中的变量。

  5. 表达式捕获

    上述捕获只能捕获左值,而不能捕获右值。C++14之后允许捕获的成员用任意的表达式进行初始化,被声明的捕获变量类型会根据表达式进行判断,判断方式与使用auto本质上是相同的。

可变lambda

采用值捕获的方式,lambda表示式不能修改外部变量,如果想要修改,使用mutable修饰。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top