lambda表示式用法

2021-10-09 12:29:20 字數 2098 閱讀 2379

lambda 表示式實際上是乙個函式,只是它沒有名字,叫匿名函式。c++11新增了lambda函式,其基本格式如下:

[捕捉列表] (引數) mutable -> 返回值型別
一、c++中使用lambda

"捕捉列表",也叫「外部變數訪問方式說明符」,可以是=&,表示{}中用到的、定義在{}外面的變數在{}中是否允許被改變。=表示不允許,&表示允許。當然,在{}中也可以不使用定義在外面的變數。「-> 返回值型別」可以省略。

[var] 表示以值傳遞方式捕捉變數var

[=] 表示值傳遞捕捉所有父作用域變數

[&var] 表示以引用傳遞方式捕捉變數var

[&] 表示引用傳遞捕捉所有父作用域變數

[this] 表示值傳遞方式捕捉當前的this指標

還有一些組合:

[=,&a] 表示以引用傳遞方式捕捉a,值傳遞方式捕捉其他變數

注意:捕捉列表不允許變數重複傳遞,如:[=,a]、[&,&this],會引起編譯時期的錯誤

「外部變數訪問方式說明符」還可以有更加複雜和靈活的用法。例如:

[=] (int x, int y) -> bool
例子:

int a[4] = ;

sort(a, a+4, [=](int x, int y) -> bool );

for_each(a, a+4, [=](int x) );

輸出結果:5,2,9,4

例子2(用到外部變數):

#include #include using namespace std;

int main()

;int total = 0;

for_each(a, a + 4, [&](int & x) );

cout << total << endl; //輸出 10

for_each(a, a + 4, [=](int x) );

return 0;

}

輸出結果:

102 4 6 8

第乙個for_each,[&]表示該 lambda 表示式中用到的外部變數 total 是傳引用的,其值可以在表示式執行過程中被改變(如果使用[=],編譯無法通過)。該 lambda 表示式每次被 for_each 執行時,都將 a 中的乙個元素累加到 total 上,然後將該元素加倍。

例子3

int main(int argc, char* ar**)

; //接受兩個引數

cout << total(a, b)int t = fun4(10, 20);

cout << t << endl; //42

cout << a <<" "<< b << endl; //5 7

return 0;

}

1.總結

1.lambda表示式(){},配合訊號與槽使用特別方便,c++11新標準  在.pro 檔案裡面新增  config += c++11  之後可以使用。

2.這個方括號是用來傳遞外部變數的, 因為在匿名函式中是無法使用外部變數的, 只能通過方括號傳遞給他, 才能捕獲到. 比如我需要使用a這個變數,

只需要在方括號中加入a即可:[a](){};但是如果要傳的變數很多, 乙個個加到方括號裡就太麻煩了, 這時我們可以使用 '=', 將外部所有區域性變數、類中

所有成員以值傳遞方式傳進來: [=] (). 但是通過這種方式傳遞進來的變數是唯讀的, 不能修改;

3.使用 this, 可以把類中所有成員以值傳遞方式傳遞進來;[this](){}

4.使用 &, 把外部所有區域性變數, 通過引用方式傳遞進來(不推薦, 容易出錯);

5.{}花括號內為匿名函式的邏輯**;

connect(chk, &qcheckbox::clicked, [=](bool checked));

Lambda表示式用法

c 2.0的匿名方法允許我們以內聯的方式來實現委 託例項,而c 3.0的lambda表示式允許我們使用一 種更接近人的思維 更自然的方式來實現類似於匿 名方法同樣的效果。lambda表示式格式為 引數列表 表示式或者語句塊 可以有多個引數,乙個引數,或者無引數。引數型別 可以隱式或者顯式。例如 x,...

lambda表示式 lambda表示式

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

Lambda表示式的用法

1 函式式程式設計思想概述 在數學中,函式就是有輸入量 輸出量的一套計算方案,也就是 拿什麼東西做什麼事情 相對而言,物件導向過分強調 必須通過物件的形式來做事情 而函式式思想則盡量忽略物件導向的複雜語法 強調做什麼,而不是以什麼形式做。2 lambda標準格式 lambda省去物件導向的條條框框,...