[C++] lambda 表达式
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...