所有lambda声明都应该是const-static
Should all lambda declarations be const static?
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
的每次调用都将使用它自己的第一个参数。
虽然这个例子很做作,但我希望它有助于澄清这一点。
相关文章:
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- std::move a const std::vector in a lambda capture
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- 你能初始化unique_ptrs "static const vectors"吗?(C++17 与 GCC 7.3)
- 我应该使用 const shared_ptr<T>&or shared_ptr<T> 作为我的 lambda 函数的参数吗?
- 明确定义'static const variable in a struct'对C++ 11 及以上有什么影响吗?
- 在lambda中捕获各种向量使元素const
- const std::unordered_map<char, int>' 因为 'this' 参数会丢弃 lambda 中的限定符
- 我需要用c ++ 98重写c ++ 11代码,c ++ 11正在使用lambda函数[&](const Output & o
- lambda捕获的const int变量的值类别
- 在另一个 lambda 中捕获一个 lambda 可能会违反 const 限定符
- 如何在班级成员中初始"static const char * []"?[C++]
- constexpr static std::array<const char *,5> 无法使用 MSVC2013 进行编译
- 不可变的 lambda 函数:复制捕获的变量是否允许是 const
- const std::function 包装一个非 const 运算符() / 可变 lambda
- 如何在头文件中定义const-static std::string
- const/static关键字是否在变量声明中传播
- 所有lambda声明都应该是const-static
- const-static auto lambda与引用捕获一起使用
- C/C++-建议使用const-static还是#define