通過引用捕獲
如果在區域性變數的名稱前加上 &
,則變數將通過引用捕獲。從概念上講,這意味著 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。