Lambad表示式使用以及原理

2021-10-08 11:07:28 字數 2622 閱讀 6186

lambad表示式的形式:(

)->return_type

[

]:不捕獲任何外部變數[=

]:以傳值的方式捕獲外部變數[&

]:以傳引用的方式捕獲外部變數

[this

]:如果是在類的成員方法中的話,可以捕獲this指標[=

,&a]

:a以引用的方式捕獲,其他都以值傳遞的方式進行捕獲

[a,&b]

:a以傳值的方式進行捕獲,b以傳引用的方式進行捕獲

int

main()

;//無需返回值,可以省略不寫

auto lam2 =

();lam1()

;lam2()

;auto lam3 =

(int a,

int b)

->

int;

cout <<

lam3(1

,99)<< endl;

int x =

999;

auto lam4 =[=

](int y)

->

int;

cout <<

lam4(1

)<< endl;

int z =

10000

;int j =

99999999

;auto lam5 =

[&z, j]()

mutable

;lam5()

; cout <<

"z = "

<< z <<

"j = "

<< j << endl;

return0;

}

執行結果:

this is lambad exp1

this is lambad exp2

1001000

z = 0 j = 99999999

規則如下:

[

]:對應類的成員變數 和 建構函式的引數列表

():對應給類的operator

()傳遞的引數

-> retutn_type返回值:指的是operator

()的返回值

:函式體指的是operator

()的函式題

其中,operator

()是乙個const方法,但是可以給lambad表示式(

)後面加mutable使失去const性質

下面拿幾個lambad表示式以及其編譯器給我們生成的類作解釋:

檔案操作的lambad

const string path =

"./"

;auto fileop =

[path]

(std::string filename)

->file*

;//對應的類為

class

fileop1

file *

operator()

(std::string filename)

private

: std::string path_;

};

比較兩個整形值的大小
auto com =

[x,y]()

->

bool

;//對應的類為

template

<

typename ty =

int>

class

com1

bool

operator()

()const

private

: ty ma;

ty mb;

};

求解四個整形值的和
auto add1 =

(int a =-1

,int b =-1

,int c =-1

,int d =-1

)->

int;

//對應的類是

template

<

typename ty =

int>

class

add1

intoperator()

(ty a,ty b,ty c,ty d)

const

};

lambad表示式實際上也是operator()運算過載,只不過我們程式猿不需要自己去實現對應的類,由編譯器給我們生成,使用時,實際上我們呼叫的是物件的operator();

lambad表示式的生命週期為當前語句,所以我們一般和std::function搭配使用,將lambad表示式的型別保留下來;

由於預設生成的operator()是乙個常方法,所以,如果我們需要在operator()中修改值,需要這樣寫:()mutable -> type {},新增mutable。

Ognl表示式語言使用以及迭代

ognlcontext物件 ognlcontext用法 public classognldemo1 2.ognl 表示式語言語言取值,取根元素的值,不用帶 號 throwsexception test public voidtestogn2 throwsexception 3.ognl 對靜態方法呼...

匿名方法,lambad表示式,匿名類

其實lambad表示式就是 函式 或者說是 方法 寫法的乙個進化,越來越簡化而已,如數學方法裡的f x 匿名方法 顧名思義,匿名方法就是沒有名稱的方法,但是有定義引數。匿名方法最明顯的好處就是可以降低另寫乙個方法的工作量 另外乙個好處就是可以訪問呼叫者的變數,降低傳引數的複雜度。匿名方法不是乙個事先...

Day6 函式與Lambad表示式

函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。函式能提高應用的模組性,和 的重複利用率。你已經知道python提供了許多內建函式,比如print 但你也可以自己建立函式,這被叫做使用者自定義函式。定義乙個函式 你可以定義乙個由自己想要功能的函式,以下是簡單的規則 def 函式名 引...