假设我有以下代码段:
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
语句,因此不必在每次迭代时都执行该检查吗?
免责声明:
if
语句放在循环之外。但这仅是一个更复杂案例的代表示例。谢谢!
答案 0 :(得分:0)
我的问题是:编译器会在“复制”内联函数之前评估if语句,从而不必在每次迭代时都执行该检查吗?
该语言不需要它。如果优化编译器在编译时知道flag
的值,则可能能够实现这一目标。但是,如果不查看编译器生成的汇编代码,很难说出来。