在lambda中 一般的引數捕獲有
1.[=]值傳遞
2.[&]引用傳遞
官方文件寫傳值只能讀不能寫,但傳引用的話可以讀和寫。
如果增加mutable宣告, 則可以修改值傳遞的物件。
例1
j = 10;
auto by_val_1 = [j]()mutable;
by_val_1();
cout << "j: " << j << endl;
結果lambda j: 11
j: 10
這個例子 lambda中通過嘗試修改變數j,並且輸出修改後的值顯示為11
但是 對於外部的變數j並沒有任何改動
因而得知值傳遞帶mutable宣告雖然可以改變lambda中的物件, 但不會對外部變數產生影響例2
class obj
};obj obj1;
auto by_ref_func = [&]()
; by_ref_func();
auto by_va_func = [=]()
;
以上的**無法通過編譯
在lambda內呼叫物件的普通函式 可以使用引用傳遞
但普通的值傳遞不能 有兩種辦法解決
1增加mutable宣告
auto by_val_lambda_func = [=]()mutable
;
2目標呼叫函式宣告為const
class obj
};
C 11 lambda表示式小結
目錄problems lambda表示式是乙個匿名內聯函式,可以定義別的函式體中,其形式如下 capture list parameter list return type從中可以看到,lambda只能使用尾置返回型別 尾置返回型別放在引數列表後邊以 開頭,然後再原來放返回型別的地方放乙個auto。...
C 11Lambda捕獲列表使用
情況比較多,發現乙個比我總結好的,摘抄之 捕獲值列表,是允許我們在lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原...
C 11 lambda 快速理解
lambda 匿名函式 現階段,編譯器會將lanmbda匿名函式,轉換為仿函式!故,stl演算法完全可以使用lambda匿名函式。auto b2 a,b int c int 1000 var 傳值方式 唯讀 將變數傳遞到匿名函式中 父作用範圍的所有變數以傳值方式 唯讀 傳遞到匿名函式中 包括this...