Lambda对象声明(std::function<>()
/ auto lambda = []()...
)总是文字,对吗?那么这是否意味着我们应该为了清晰起见,编码礼仪甚至性能,总是声明它们const static
就像任何其他范围的文字常量一样?
答案 0 :(得分:5)
Lambda对象声明(std :: function&lt;&gt;()/ 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
都会使用它自己的第一个参数。
虽然这个例子非常人为,但我希望有助于明确这一点。