C++11引入了Lambda表達式。Lambda表達式的引入,方便了簡短函數的定義,爲經常使用的一次性函數的定義和使用提供了很大的便利。函數
Lambda表達式其實是一種匿名函數定義,經常使用來定義簡單和不重複使用的函數。其可以使用的外部變量、定義方式等都與常規函數有所不一樣。this
#語法結構# Lambda表達式的完整定義結構以下:指針
auto f = [函數對象參數](函數參數列表) mutable throw(類型)->返回值類型 {函數語句};
auto是C++11新引入的關鍵字,主要用來自動推斷變量的類型,Lambda表達式返回一個函數指針,能夠用通常的函數指針定義式來指示類型,可是在C++11中,使用auto更爲簡便。調用Lambda定義的函數,能夠直接使用如下語句來調用:code
f(實參列表);
Lambda表達式的定義結構分爲六個部分:對象
#基本示例#table
##基本Lambda表達式的使用##匿名函數
lang: cpp int x = 10; int y = 20; int z; z = [=](int a, int b) -> int { return (a + x) * (b + y); }(1, 2); cout << z << endl;
最後輸出結果爲242。Lambda表達式在定義以後能夠直接使用()進行調用。變量
##函數指針的使用##語法
lang: cpp typedef int (*Func)(int&, int&); Func f = [](int& a, int& b) -> int { return a + b; };
這種方式定義的f跟前面用auto定義的f是一致的。調用方法也跟日常的函數指針一致。引用
##關於mutable##
lang: cpp int x = 1; int y = 1; int z; cout << "x1: " << x << "/t y1: " << y << endl; z = [=]() mutable -> int { int n = x + y; ++x; ++y; cout << "x2: " << x << "/t y2: " << y << endl; return n; }(); cout << "x3: " << x << "/t y3: " << y << endl; cout << "z: " << z << endl;
輸出的結果爲:
lang: cpp x1: 1 y1: 1 x2: 2 y2: 2 x3: 1 y3: 1 z: 2
mutable關鍵字只能在Lambda表達式定義體以內改變x和y的值,可是這種改變並不能傳遞到定義體以外。