lambda表示式學習

2021-08-18 00:22:05 字數 2377 閱讀 7891

lambda表示式的基本形式,如下:

[capture list] (params list)  [key word: mutuble] ->return type
說明:(1) [capture list]裡面的內容具體形式如下:

(2) params list 輸入引數,這個和普通的函式一樣

(3)keyword:mutuble:預設情況下,lambda表示式不會改變乙個通過傳值方式來捕獲引數的值,通過mutuble可以實現這個問題。

(4)return type:預設該部分是可選的,但是如果lambda表示式有2個或以上的return,那麼必須指定返回型別

(5) func body:函式體

以下是一些例子

#include #include #include using namespace std;

void testcapturelist()

; // error 無法隱式捕獲「a」 "b",因為尚未指定預設捕獲模式

auto fun0 = [a,b]() ; //0k

fun0(); //3

auto fun1 = [=]() ; // ok

// auto fun2 = [=]() ; // error c3491: 「a」: 無法在非可變 lambda 中修改通過複製捕獲

fun1(); //3

cout << "a = " << a << " b = " << b << endl;

auto fun3 = [&]() ;

fun3(); //5

cout << "a = " << a << " b=" << b << endl;

// auto fun4 = [=, &a] () ; // error c3491: 「b」: 無法在非可變 lambda 中修改通過複製捕獲

auto fun5 = [&b, &a]() ;

fun5(); //7

}void testreturntype()

; cout << fun1() << endl;

auto fun2 = (int a) ;

cout << fun2(4) << endl;

int bbb = 5;

//在vs2017編譯可以通過,在code:blocks 16.01編譯出現問題(error c3499: 已指定返回型別為 void 的 lambda 無法返回值)

auto fun3 = (int a) ;

cout << fun3(bbb) << endl;

auto fun4 = (int a) -> int ;

cout << fun4(-4) << endl;

}void testmutable()

; v1 = 0;

cout << f() <

auto f1 = [&v1]() ;

v1 = 0;

cout << f1() << endl; //1

cout << v1 << endl; //1

auto f2 = [&v1]() ;

v1 = 0;

cout << f1() << "," << v1 << endl; //1,0 右結合原因

}void testparam()

; cout << thesamelen(a, b) << endl; //0

cout << thesamelen(a, c) << endl; //1

auto addchz = (string &a) ;

addchz(a);

cout<

}void print(const int &a)

int main()

; for_each(aa, aa + 4, print);

cout << endl;

for_each(aa, aa + 4, (const int &a) );

auto fun = (int a, int b) ;

cout << endl << fun(2, 3) << endl;

int a1 = 3;

auto fun2 = [a1](int a) ;

cout << endl << fun2(33) << endl;

testcapturelist();

testreturntype();

testmutable();

testparam();

system("pause");

return 0;

lambda表示式 lambda表示式

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

Lambda表示式學習

看完肯定會有幫助 理解functional inte ce 函式式介面 是學習lambda表示式的關鍵 函式式介面的定義 任何介面,如果只包含唯一乙個抽象方法,那麼它就是乙個函式式介面。對於函式式介面,可以通過lambda表示式來建立該介面的物件 演化過程 一般我們定義介面 例項化介面方法,程式呼叫...

Lambda表示式和Lambda表示式樹

原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...