假设我有一些代码如下:
void doTasksAndStuff()
{
// Do stuff
...
// Do task
...
// Do stuff
...
// Do same task
...
// Do stuff
...
}
由于任务完成两次,我认为最好将相应的代码考虑在内:
void doTask()
{
// Do task
...
}
void doTasksAndStuff()
{
// Do stuff
...
doTask();
// Do stuff
...
doTask();
// Do stuff
...
}
现在,如果我这样写的话会怎么样:
void doTasksAndStuff()
{
auto doTask = []()
{
// Do task
...
};
// Do stuff
...
doTask();
// Do stuff
...
doTask();
// Do stuff
...
}
由于doTask()仅在函数doTasksAndStuff()中调用,在我看来,它是一种干净的方式来分解代码而不污染任何命名空间,但这是两种分解方法之间的唯一区别吗?
特别是性能如何?内联怎么样?
答案 0 :(得分:0)
表现应该差不多。 lambdas的最大优点(和差异)是你可以在闭包中捕获局部变量。如果您将其作为命名函数执行,那么您必须传递任务中使用的所有局部变量。
请注意,另一种方法是使用本地结构,您可以将其视为穷人的lambda。