【发布时间】:2021-10-24 19:23:42
【问题描述】:
我知道 lambda 是如何工作的,我在代码中几乎所有地方都使用 lambda,是否有任何情况下我应该更喜欢使用普通函数而不是 lambda
【问题讨论】:
-
如果您在代码中“几乎无处不在”使用 lambda,那您就太过分了。当某些代码/功能在非常有限的上下文中使用时,Lambda 往往更可取,而当代码/功能需要在多个上下文中被利用或重用时,函数往往更可取。
我知道 lambda 是如何工作的,我在代码中几乎所有地方都使用 lambda,是否有任何情况下我应该更喜欢使用普通函数而不是 lambda
【问题讨论】:
何时不使用 lambda:
当函数在标头中声明并在.cpp 文件中实现时。 lambda 无法做到这一点。
当函数是模板时,您希望能够手动指定模板参数。使用 lambas 执行此操作需要使用丑陋的语法:foo.operator()<...>(...)。
何时使用 lambda:
当函数被重载/模板化时,您想方便地将其作为参数传递给不同的函数。
你想避免ADL。
除此之外,更喜欢常规函数而不是 lambda 只是一种约定。
如果你想违背这个约定,你应该准备好解释你的推理。
【讨论】:
什么时候不使用 lambdas 而不是普通函数?
当函数可以在多个上下文中重复使用时,通常最好使用普通函数。
【讨论】:
auto f = [&](){}; 捕获所有内容被认为是一种不好的做法让我们说 1 或 2变量引用。
[&] 只捕获它需要的内容。与手动拼写捕获相比,没有任何开销。
struct 或class 来包装数据。