通过引用捕获

如果在局部变量的名称前加上 &,则变量将通过引用捕获。从概念上讲,这意味着 lambda 的闭包类型将有一个引用变量,初始化为对 lambda 范围之外的相应变量的引用。在 lambda 体中使用变量将引用原始变量:

// Declare variable 'a'
int a = 0;

// Declare a lambda which captures 'a' by reference
auto set = [&a]() {
    a = 1;
};

set();
assert(a == 1);

关键字 mutable 不是必需的,因为 a 本身不是 const

当然,通过参照拍摄意味着拉姆达不能转义它捕获的变量的范围。因此,你可以调用带函数的函数,但是你不能调用将 lambda 存储在引用范围之外的函数。你不能归还 lambda。