Lambda表达式从C++11开始被支持。其作用是创建一个临时的函数。
C++11开始,有3种方法可以创建/传递可被调用的对象:
[ capture-list ] ( params ) mutable(optional) exception(optional) attribute(optional) -> ret(optional) { body }
auto Plus = [](int a, int b) ->int { return a + b; };
什么是捕获?
Lambda表达式的捕获,其实就是将局部自动变量保存到Lambda表达式内部。
Lambda表达式不能捕获全局变量或static变量。
捕获有两种方式
按值捕获([target])、按引用捕获([&target])
捕获列表初始化(C++14)
[v = target]、[&r = target]
默认捕获(不建议使用)
[=]表示按值捕获可见范围内的所有局部变量。
[&]表示按引用捕获可见范围内的所有局部变量。
按值捕获的类型是const的
如果要修改按值捕获的参数,需要将Lambda表达式声明为mutable的。
auto func = [i]() mutable {i = 200;};
捕获this指针
这是可行的,但是不能[&this]
Lambda可以像函数指针一样赋值