lambda表達式的最簡單形式是:
[](){};
這樣就構成了lambda表達式的最基本組成部分,它實際上是在構造一個能夠捕獲作用域中的變量的無名函數對象的閉包,這裏[]
就是起這個捕獲的作用,()
裏面就像普通函數一樣寫形參,花括號就是構造的閉包。
如果直接寫像上面一樣的簡單形式,是不會執行的,只有最後加上括號調用了纔會。同時自然的,最後的括號與前面的括號裏的參數要對應。
int main()
{
[](){ std::cout<<"hahaha"<<endl; };//no output
[](){ std::cout<<"hahaha"<<endl; }();//worked
[](int a){ std::cout<<"cout << "<< a <<endl; }(100);// cout << 100
}
另一個用法是,我們可以將其作爲函數的參數。當然,前提是返回的類型要符合函數的形參。例如在可以作爲stl
中sort
函數中comparator
。
vector<int> arr{ 9, 5, 2, 7 };
std::sort(arr.begin(),arr.end(),[](int a,int b){return a < b;});
to be continued...