【发布时间】:2020-04-08 05:56:06
【问题描述】:
我们有一个在自身内部使用非捕获 lambda 的函数,例如:
void foo() {
auto bar = [](int a, int b){ return a + b; }
// code using bar(x,y) a bunch of times
}
现在其他地方需要 lambda 实现的功能,所以我将把 lambda 从 foo() 提升到全局/命名空间范围。我可以将其保留为 lambda,使其成为复制粘贴选项,或者将其更改为适当的函数:
auto bar = [](int a, int b){ return a + b; } // option 1
int bar(int a, int b){ return a + b; } // option 2
void foo() {
// code using bar(x,y) a bunch of times
}
将其更改为适当的函数是微不足道的,但这让我想知道是否有某种原因不将其保留为 lambda?有什么理由不只是在任何地方都使用 lambdas 而不是“常规”全局函数吗?
【问题讨论】:
-
我认为如果不仔细使用 lambda,捕获意外变量会导致许多错误