函数和代码保理

时间:2014-05-04 00:23:44

标签: c++ performance lambda

假设我有一些代码如下:

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()中调用,在我看来,它是一种干净的方式来分解代码而不污染任何命名空间,但这是两种分解方法之间的唯一区别吗?

特别是性能如何?内联怎么样?

1 个答案:

答案 0 :(得分:0)

表现应该差不多。 lambdas的最大优点(和差异)是你可以在闭包中捕获局部变量。如果您将其作为命名函数执行,那么您必须传递任务中使用的所有局部变量。

请注意,另一种方法是使用本地结构,您可以将其视为穷人的lambda。