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 時,查詢表示...