C++ lambda函数中的表达式何时求值?

C++ lambda函数中的表达式何时求值?,c++,lambda,C++,Lambda,给出这个小片段:a和b在编译时是未知的。Map是向量的映射函数,将lambda函数映射到bar的每个元素上。假设fooify()被调用。。。是在执行map()之前将a/b作为常量求值,还是在每次调用lambda时将其求值 Foo::fooify(矢量和条形){ float a=getA(); float b=getB(); 映射(条,[&](浮动c){c*(a/b);}); } 我怀疑a/b将在每次调用lambda函数时进行评估。您可以使用以下方法确保仅对其进行一次评估: Foo::fooify

给出这个小片段:a和b在编译时是未知的。Map是向量的映射函数,将lambda函数映射到bar的每个元素上。假设fooify()被调用。。。是在执行map()之前将a/b作为常量求值,还是在每次调用lambda时将其求值

Foo::fooify(矢量和条形){
float a=getA();
float b=getB();
映射(条,[&](浮动c){c*(a/b);});
}

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

Foo::fooify(vector<float>& bar){
  float a = getA();
  float b = getB();
  float ab = a/b;
  map(bar, [](float c){c*ab;});
}
Foo::fooify(矢量和条形){
float a=getA();
float b=getB();
浮动ab=a/b;
映射(条,[](浮点c){c*ab;});
}

您如何区分两者的区别?如果你说不出两者的区别,那么你到底在问什么?区别在于,在第一种情况下,将有一个部门运作,而在第二种情况下,将有200万。我只需事先进行计算,就可以很容易地避开这个问题,我只想知道实际会发生什么。