鉴于这个小片段:在编译时不知道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);});
}
答案 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;});
}