8

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

4

1 回答 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 回答