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

qua*_*ant 7 c++

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

Dav*_*eas 5

Lambda对象声明(std :: function <>()/ auto lambda = ...)总是文字,对吧?

不,lambdas不是文字.它们可以从封闭范围捕获状态,并且可以是非常量的.考虑:

int f(int a, int b) {
   auto lambda = [=](int x) { return a*x; };
   return lambda(b);
}
Run Code Online (Sandbox Code Playgroud)

如果添加了static那里,变量 lambda将使用的所有代码共享f,它只会在第一次调用捕捉的值被初始化a从第一次调用f.没有它static每次调用f将使用它自己的第一个参数.

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