C 11 lambda使用技巧小結

2021-07-23 10:23:26 字數 883 閱讀 8542

在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...