所有lambda声明都应该是const static吗?

时间:2013-07-05 13:08:09

标签: c++

Lambda对象声明(std::function<>() / auto lambda = []()...)总是文字,对吗?那么这是否意味着我们应该为了清晰起见,编码礼仪甚至性能,总是声明它们const static就像任何其他范围的文字常量一样?

1 个答案:

答案 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都会使用它自己的第一个参数。

虽然这个例子非常人为,但我希望有助于明确这一点。