C Lambda匿名函式表示式

2022-04-13 01:26:42 字數 2403 閱讀 7576

[函式物件引數] (形參) mutable 或 exception 宣告 -> 返回值型別

表示表示式的開始,必須有;用來設定如何捕獲匿名函式外的變數

[ ]裡為空,表示任何變數都不會傳遞給lambda表示式,沒有引數

int a = 10

;

int b = 20

;

intc;

int x = ()->int ();//

不能捕獲匿名函式外的所有變數

std::cout

<< "x="

<< x <<:endl>

return

0;

[=]  表示預設按值傳遞,編譯器自動為我們按值傳遞了所有區域性變數

按值傳遞:語句體內修改變數值,不會影響外面的變數值

注意:捕獲的變數將不會被作為垃圾**,直至引用變數的委託超出範圍為止

int a = 10;

int b = 20;

int c = 30;

int x = [=]()->int ();//按傳值方式可以捕獲所有外部變數

[&]  表示預設按引用傳遞

引用傳遞,由於兩個變數指向同乙個資料,所以語句體內修改變數值,會影響外面的變數值

#include int

main() ();//

按引用方式可以捕獲所有外部變數

std::cout

<< "x="

<< x <<:endl>

std::cout

<< "

外部a=

"<< a <<:endl>

return0;

}

[var]:var是變數名,只傳遞變數var,其它不能傳;前面可以新增&字首,表示var變數按引用傳遞

[x, &y]    //x 按值捕獲, y 按引用捕獲

int a = 10

;

int b = 20

;

intc;

int x = [a, b]()->int ();//

只能捕獲a和b變數,不能捕獲c變數

std::cout

<< "x="

<< x << std::endl;

[ =,&var] :引用捕獲變數var,其他外部變數使用值捕獲

[ &,var]:值捕獲變數var,其他外部變數使用引用捕獲

this:函式體內可以使用 lambda 所在類中的所有成員變數和成員函式

#include class

a

void

print() (); //

用this指標使用類成員

std::cout << "x="

<< x <<:endl>

}private

:

intm_i;

intx;

};int

main()

引數列表--lambda表示式自己的引數列表

沒有引數可以省略

可以按值傳遞,如 (a,b);也可以按引用傳遞,如 (&a,&b)

#include auto lambda = (int value) ;  //

定義乙個匿名函式

//注意:最後面沒有(),所以沒有執行

intmain()

加上mutable後,在語句體內可以修改變數值;省略變數只能唯讀,但不會修改函式體外的值

#include int

main() ();

//按值傳遞時,匿名函式內預設不能修改外部變數值

//加上mutable修飾符就可以修改,但是按區域性變數處理

std::cout

<< "x="

<< x <<:endl>

std::cout

<< "

外部a=

如果只有一處return時,可以省略,自動判斷出型別

C lambda 表示式 函式

lambda 可以方便地定義和建立匿名函式。capture list params list mutable exception return type 各項具體含義如下 capture list 捕獲外部變數列表 params list 形參列表 可省略 mutable指示符 用來說用是否可以修改...

python 的lambda匿名函式表示式

pep8已經不建議使用lambda,而是推薦使用def去定義乙個函式 關於python中的lambda的 乙個語法,三個特性,四個用法,乙個爭論 在python中,lambda的語法是唯一的。其形式如下 lambda argument list expression 其中,lambda是python...

函式表示式

函式定義有以下兩種方式 一種是函式宣告,一種是函式表示式。函式宣告 在執行 之前會先讀取函式宣告,即函式宣告提公升。函式表示式 常用語法形式是常規的變數賦值語句,即建立乙個匿名函式並賦值給乙個變數。函式表示式在使用之前必須賦值,否則會出錯,這點與函式宣告提公升不同。能夠將匿名函式作為其他函式的值進行...