C 11Lambda捕獲列表使用

2021-08-03 21:28:14 字數 706 閱讀 3784

情況比較多,發現乙個比我總結好的,**

摘抄之:捕獲值列表,是允許我們在lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原有變數的值,按引用捕獲是可以在lambda表示式中改變原有變數的值。

[捕獲值列表]:

1、空。沒有使用任何函式物件引數。

2、=。函式體內可以使用lambda所在作用範圍內所有可見的區域性變數(包括lambda所在類的this),並且是值傳遞方式(相當於編譯器自動為我們按值傳遞了所有區域性變數)。

3、&。函式體內可以使用lambda所在作用範圍內所有可見的區域性變數(包括lambda所在類的this),並且是引用傳遞方式(相當於編譯器自動為我們按引用傳遞了所有區域性變數)。

4、this。函式體內可以使用lambda所在類中的成員變數。

5、a。將a按值進行傳遞。按值進行傳遞時,函式體內不能修改傳遞進來的a的拷貝,因為預設情況下函式是const的。要修改傳遞進來的a的拷貝,可以新增mutable修飾符。

6、&a。將a按引用進行傳遞。

7、a, &b。將a按值進行傳遞,b按引用進行傳遞。

8、=,&a, &b。除a和b按引用進行傳遞外,其他引數都按值進行傳遞。

9、&, a, b。除a和b按值進行傳遞外,其他引數都按引用進行傳遞。

C 11 Lambda表示式捕獲列表

參考 捕獲列表 1 空,沒有使用任何函式物件引數。2 函式體內可以使用lambda所在作用範圍內所有可見的區域性變數 包括lambda所在類的this 並且是值傳遞方式 相當於編譯器自動為我們按值傳遞了所有區域性變數 3 函式體內可以使用lambda所在作用範圍內所有可見的區域性變數 包括lambd...

C 11 Lambda表示式捕獲列表

捕獲列表 1 空,沒有使用任何函式物件引數。2 函式體內可以使用lambda所在作用範圍內所有可見的區域性變數 包括lambda所在類的this 並且是值傳遞方式 相當於編譯器自動為我們按值傳遞了所有區域性變數 3 函式體內可以使用lambda所在作用範圍內所有可見的區域性變數 包括lambda所在...

C 11 lambda使用技巧小結

在lambda中 一般的引數捕獲有 1.值傳遞 2.引用傳遞 官方文件寫傳值只能讀不能寫,但傳引用的話可以讀和寫。如果增加mutable宣告,則可以修改值傳遞的物件。例1j 10 auto by val 1 j mutable by val 1 cout j j endl 結果lambda j 11...