012 泛型 lambda表示式捕獲

2022-04-26 04:30:16 字數 1047 閱讀 7779

lambda表示式的捕獲跟引數差不多,可以是值或者引用。

1.值捕獲

與傳值引數類似,採用值捕獲的前期是變數可以拷貝;與引數不通透的是:**獲的變數的值是在lambda建立時拷貝,而不是呼叫時拷貝。

void

func();

v1 = 0

; auto j = f(); //

j為1;f儲存了我們建立它時v1的拷貝

}

2.引用捕獲

在使用引用捕獲的時候,由於lambda儲存的是引用,因此值會隨著引用變化而變化。

void

func();

v1 = 0

; auto j = f(); //

j為0;f儲存的是v1的引用,而非拷貝

}

在以上兩種捕獲的方式中,都有著相同的問題和限制:lambda捕獲的是區域性變數,如果lambda在函式結束後執行,那麼這些區域性變數就都消失了。

除了上面兩種捕獲之外,我們還可以採用隱式捕獲。

3.隱式捕獲

為了指示編譯器推斷捕獲列表,我們可以在捕獲列表中寫乙個&或=。&告訴編譯器採用引用捕獲,=則為值捕獲方式。如:

auto f = [&] ;

auto f = [=] ;

除了&與=,還有以下的捕獲列表

空捕獲列表

[names]                    names是乙個逗號分隔的名字列表,預設全部都被拷貝

[&]                           引用捕獲

[=]                           值捕獲

[&,identifier_list]        identifier_list為乙個逗號分隔的列表,包含多個來自函式的變數,均採用值捕獲方式,而任何隱式捕獲的變數都採用引用捕獲的方式

[=,identifier_list]        identifier_list為乙個逗號分隔的列表,包含多個來自函式的變數,均採用引用捕獲方式,而任何隱式捕獲的變數都採用值捕獲的方式

泛型委託 Lambda表示式

發信人 joshuag 秦之魅 加菲 我懷念的 信區 dotnet 標 題 閃電,看這個,泛型委託 lambda表示式 發信站 武漢白雲黃鶴站 2008年01月21日15 46 01 星期一 站內信件 我覺得你給出的那個委託的第二個引數不需要用泛型,這樣 public delegate void g...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

泛型中的Lambda表示式的簡化過程

func double double double funcdouble newfunc double double double a,b 先提一點 lambda表示式存在的意義是 不想重複宣告簡單的方法 為了避免新增過於簡單的 而使得程式看起來變得臃腫 比如 想呼叫乙個加法 public int ...