c++11 lambda表达式

2020-02-17  本文已影响0人  AI科技智库

1 lambda表达式

C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。Lambda表达式把函数看作对象。Lambda表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。Lambda 表达式本质上与函数声明非常类似,Lambda表达式具体形式如下:

    [capture](parameters) mutable ->return-type{statement}
例如:
    [](int a, int b) -> int { return a + b; };

参数介绍:

1.2 变量捕获

Lambda 函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在 Lambda 表达式声明中的方括号 [] 内。这个机制允许这些变量被按值或按引用捕获。还可以隐式捕获,让编译器根据函数体中的代码来推断需要捕获哪些变量,如下图的例子:

std::vector<int> some_list;
int total = 0;
for (int i = 0; i < 5; ++i) some_list.push_back(i);
std::for_each(begin(some_list), end(some_list), [&total](int x)
{
    total += x;
});

此例计算 list 中所有元素的总和。变量 total 被存为 Lambda 函数闭包的一部分。因为它是栈变量(局部变量)total 引用,所以可以改变它的值。

上一篇 下一篇

猜你喜欢

热点阅读