Lambda 对象声明 ( std::function<>()
/ auto lambda = []()...
) 始终是文字,对吗?那么这是否意味着我们应该为了清楚起见、编码礼仪甚至性能,总是const static
像任何其他作用域文字常量一样声明它们?
问问题
1656 次
1 回答
5
Lambda 对象声明(std::function<>() / auto lambda = ...)总是文字,对吧?
不,lambdas 不是文字。它们可以从封闭范围捕获状态,并且可以是非常量的。考虑:
int f(int a, int b) {
auto lambda = [=](int x) { return a*x; };
return lambda(b);
}
如果在此处添加static
,则该变量 lambda
将由所有使用 的代码共享f
,并且仅在第一次调用捕获a
从第一次调用到的值时才对其进行初始化f
。通过没有它,static
每次调用都f
将使用它自己的第一个参数。
虽然这个例子非常人为,但我希望它有助于澄清这一点。
于 2013-07-05T13:46:10.930 回答