【发布时间】:2021-01-30 19:12:49
【问题描述】:
基本上,我的意思是:
void funcForFoo1()
{
// ...
}
void funcForFoo2()
{
// ...
}
void foo()
{
// Other two functions will be used here and here only
}
VS
void foo()
{
auto lambdaForFoo1 = []()
{
// ...
}
auto lambdaForFoo2 = []()
{
// ...
}
// Use the lambdas later on
}
lambda 的作用域被缩减为仅在函数内部使用,这是一件好事,并且可能比使用其他函数更有优势。但是,我相信类函数中的 lambdas 不能访问类成员,除非它捕获 this,并且使用 lambdas 而不是其他函数可能与使用其他函数相比看起来有点混乱。在您看来,哪一个最终会是更好的选择?
【问题讨论】:
-
请注意,如果类成员函数中的 lambda 捕获
this,则它可以访问其他成员。 -
啊,我不知道。我会把它添加到答案中。
-
为了使这个问题不是基于意见的,你需要不那么抽象,而不是太长的问题。这是一个可笑的狭隘眼线。
-
我不同意这是意见基础。从我的观察来看,lambda 版本的代码更难阅读和维护,更难遵循控制流程(很多时候我正在分析代码片段,突然发现顺序不同,因为片段实际上在 lambda 内部)。函数版本允许您在多个函数中重用现有代码。还有一个 lambda 捕获,这将使这个问题更加令人沮丧。
-
@MarekR “根据我的观察......”这只是证明它是基于意见的。您可能会发现 lambda 更难阅读。其他人可能更喜欢它们。然而其他人不会在意这种或另一种方式。这是将这个线程变成现场辩论的秘诀。这就是为什么存在“基于意见”的密切原因。