c ++:评估lambda函数中的“ if”语句

时间:2018-09-12 17:01:02

标签: c++11 lambda

假设我有以下代码段:

bool flag = true;

auto myFunction = [](int a, int b, bool flag)
    {
        if (flag)
        {
            // do something with a and b
        }
    }

稍后在代码中,我循环调用myFunction达数千次,对于相同的值 flag

然后,我有另一个循环,该循环也调用myFunction数千次,但使用的值为flag

我的理解是,作为lambda函数,它是一个内联函数,因此将在调用它的任何地方重复。

我的问题是:编译器会在“复制”内联函数之前在 之前评估if语句,因此不必在每次迭代时都执行该检查吗?

免责声明:

  1. 我知道这可能属于微优化类别,但是我仍然想要一个答案。
  2. 我的例子很愚蠢;我可以将if语句放在循环之外。但这仅是一个更复杂案例的代表示例。
  3. 我对lambda函数的使用是受this问题答案的启发。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我的问题是:编译器会在“复制”内联函数之前评估if语句,从而不必在每次迭代时都执行该检查吗?

该语言不需要它。如果优化编译器在编译时知道flag的值,则可能能够实现这一目标。但是,如果不查看编译器生成的汇编代码,很难说出来。