什么时候lambda函数中的表达式被计算?

时间:2015-11-19 23:18:11

标签: c++ lambda

鉴于这个小片段:在编译时不知道a和b。 Map是向量的映射函数,将lambda函数映射到bar的每个元素。假设fooify()被调用...在执行map()之前是否将a / b计算为常量,还是每次调用lambda时都会对它进行求值?

Foo::fooify(vector<float>& bar){
  float a = getA();
  float b = getB();
  map(bar, [&](float c){c*(a/b);});
}

1 个答案:

答案 0 :(得分:1)

我怀疑a/b将在每次调用lambda函数时进行评估。您可以使用以下命令确保仅对其进行一次评估:

Foo::fooify(vector<float>& bar){
  float a = getA();
  float b = getB();
  float ab = a/b;
  map(bar, [](float c){c*ab;});
}