C++11 lambda表达式

来源:互联网 发布:网络新闻稿 编辑:程序博客网 时间:2024/05/18 21:50

原文地址:http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438176.html

总结:

1、[=]值传递访问x,y所以中间不修改x,y的值
int x = 10;
int y = 3;
int z;
z = [=]()mutable throw() -> int{
int n = x + y;
x = y;
y = n;
return n;
}
cout<<z
count<<x<<y


z=13
x=10 y=3

另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:

  • [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
  • [this] 以值的方式捕获 this 指针。
  • [&] 以引用的方式捕获所有的外部自动变量。
  • [=] 以值的方式捕获所有的外部自动变量。
  • [] 不捕获外部的任何变量。


2、通过函数体后面的(5,4)传入参数
int main()
{
int n = [](int x,int y){return x + y;}(5,4)
}


n = 9


3、使用lambda定义和使用普通函数
int main()
{
auto f = [](int x,int y){return x + y;}
count<<f(5,4)<<endl;1
}


4、Lambda结合STL算法一起使用


int main()
{
...
srand(time(NULL));
generate(a,a+10,[]()->int{return rand() % 100; });


for_each(a,a+10,[&](int i){count<<i<<" ";});
...
}


5、Lambda表达式的嵌套
int main()
{
int m =[](int x){return [](int y){return y*2}(x) + 3;}(5);
}
m=13

0 0
原创粉丝点击