通过引用捕获
如果在局部变量的名称前加上 &
,则变量将通过引用捕获。从概念上讲,这意味着 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。