您的位置:首页 > 编程语言 > C语言/C++

C++11--lambda表达式

2017-09-22 09:22 239 查看
1、综述

lambda表达式就是一个没有名称的函数,即匿名函数,它可以在函数内部定义,而且lambda必须使用尾置返回来指定函数返回类型。lambda表达式的形式为:[捕获列表] (参数列表) -> 返回类型{ 函数体 },其中“捕获列表”是表达式所在函数中定义的局部变量的列表,可以为空,eg:

int main()
{
int n = 10;
auto func1 = [=]()mutable{ return ++n;}; //n是隐式值捕获
auto func2 = [&]() {return ++n;}; //n是隐式引用捕获
int i = 1, j = 2;
auto func3 = [=, &i, &j]() {return n * i * j;}; //n是隐式值捕获,i和j是显示引用捕获
auto func4 = [&, i, j]() {return n * i * j;}; //n是隐式引用捕获,i和j是显示值捕获

return 0;
}


View Code
3、lambda与函数

对于那些只在一两个地方使用的简单操作,可以直接使用lambda表达式。如果一个操作会被多个地方会使用,或者操作很复杂(包含多条语句),最好还是定义一个函数来使用。

lambda表达式捕获变量的功能与bind绑定参数有相似的效果。

对于子函数可以使用父函数中的局部变量这种行为,我们可以称做“闭包”,可见lambda表达式和bind绑定参数都可以实现“闭包”行为。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: