匿名函数lambda
本文主要介绍匿名函数lambda的基本语法和使用
基本语法
一般情况下编译器可以推断出函数返回值,所以也可以不指定返回值
捕获列表
值捕获
被捕获的变量在lambda表达式创建时拷贝注意:c、d无法修改
引用捕获
隐式捕获
隐式值捕获
隐式引用捕获
空捕获列表
表达式捕获(C++14)
上面的捕获都是已经在外层作用域声明的变量,这些捕获方式捕获的均为左值,而不能捕获右值
C++14后支持捕获右值,允许捕获的成员用任意表达式初始化,被声明的捕获变量类型会根据表达式进行判断,判断方式与auto本质上相同
泛型lambda(C++14)
C++14后lambda函数形参可以用auto关键字泛型
可变lambda
采用值捕获的方式,lambda不能修改其值,如果想要修改,使用mutable修饰
采用引用捕获的方式,lambda可以直接修改其值
混合使用隐式捕获和显式捕获
要求捕获列表中第一个元素必须是隐式捕获(&或=)
混合捕获时,若隐式捕获采用引用捕获&,则显示捕获的变量必须采用值捕获的方式
混合捕获时,若隐式捕获采用值捕获=,则显示捕获的变量必须采用引用捕获的方式,即变量名前加&