Lambda函數

  • 2022 年 10 月 21 日
  • 筆記

什麼是Lambda函數

Lambda函數也叫Lambda表達式,是匿名函數,就是沒有名字的函數,和傳統的函數不一樣。Lambda表達式是C++11中引入的新概念,用於定義並創建匿名的函數對象。首先看下Lambda表達式的基本結構。

[捕捉列表] (參數) mutable ->返回值類型 {函數體}

 

1、 [ ],標識一個,Lambda匿名函數的開始,這個必須有,不能省略,函數對象參數是傳遞給編譯器自動生成的函數對象類的構造函數的。函數對象參數只能使用到Lambda定義為止Lambda所在的作用域範圍內可見的局部變數,包括Lambda所在類的this。函數對象參數有以下形式

a)       空,沒有使用任何的函數對象參數

b)       =,函數體內使用Lambda所在範圍內的可見局部變數包括所在類的this的傳值方式,相當於編譯器給Lambda所在地的所有局部變數複製一份給Lambda函數

c)        &,函數體內使用Lambda所在範圍內的可見局部變數包括所在類的this的引用方式,相當於編譯器給Lambda所在地的所有局部變數引用一份給Lambda函數

d)       this,函數體內可以使用Lambda所在內的成員變數

e)       a,不是字母,而是指具體一個變數a,那麼Lambda內拷貝一個a使用

f)         &a,Lambda內引用a

g)       a,&b,拷貝a,引用b

h)       =,&a,&b,除ab引用,其餘拷貝

i)         &,a,b。除ab拷貝,其餘引用

2、 函數參數,這個跟常規函數一樣。

3、 mutatble,修改關鍵字,再對應位置mutatble關鍵字,才能修改函數對象參數。否則報錯。可以有,也可以沒有,但有才能修改。lambda默認是const,也就是不能修改本地變數。

4、 ->return-type返回值的方式,既然是函數就可能有返回值,那麼->就是有返回值的函數標誌。

5、 函數體,跟常規函數一樣。