所有lambda声明都应该是const-static

Should all lambda declarations be const static?

本文关键字:const-static lambda 声明 所有      更新时间:2023-10-16

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

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的代码共享,并且它将仅在第一次调用时初始化,从第一次调用f捕获a的值。由于没有static,对f的每次调用都将使用它自己的第一个参数。

虽然这个例子很做作,但我希望它有助于澄清这一点。