【发布时间】:2019-12-04 13:23:09
【问题描述】:
假设我会使用 Lamdba 函数来定义函数内的函数以更好地构建代码,在什么情况下有人可能更喜欢第二个选项而不是第一个选项,因为后者显然不太可重用,因为不能传递不同的参数?
int main() {
int foo = 1;
int bar = 4;
//Passing as Parameters
auto add = [](auto a, auto b) {
return a + b;
};
std::cout << "Add: " << add(foo, bar) << std::endl;
//Capturing by value
auto multiply = [=]() {
return foo * bar;
};
std::cout << "Multiply: " << multiply() << std::endl;
return 0;
}
【问题讨论】:
-
第二个 lambda 不需要参数,第一个需要两个参数。您可以将 lambda 作为回调传递给另一个函数,而另一个函数使用给定值调用 lambda,例如std::copy_if 需要一个带有一个参数的函数。
-
我首先反对将
add设为 lambda,它应该是一个普通函数,这使得它更加可重用,因为它可以在其他函数中使用。 -
在函数中定义函数并不是 lambdas 的真正用途:如果 C++ 想要允许在函数中定义函数,我们可以在没有 lambdas 的情况下做到这一点。特别是,您的示例/参数是关于一个纯函数(一个没有状态的函数),而 lambdas 最显着的好处是允许将状态方便地捕获到(有状态的)函子中。捕获状态对于编写无状态函数没有用也就不足为奇了。您仍然可以为此使用 lambda,但不要期望它们的所有设计方面都是相关/有用的......