通過引用捕獲

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