何时评估lambda函数中的表达式?

问题描述:

给出这个小片段:a和b在编译时不知道。 Map是矢量的映射函数,将lambda函数映射到条的每个元素上。假设fooify()被调用......在执行map()之前,a/b会被当作一个常量来计算吗?或者每次调用lambda时都会计算它吗?何时评估lambda函数中的表达式?

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

你怎么能区分?如果你分辨不清,那么你究竟在问什么? –

+0

区别在于,在第一种情况下,将会有一项划分操作,第二种情况下将会有200万。我可以简单地通过预先计算简单地解决问题,我只想知道实际将发生什么。 –

我怀疑a/b将在每次调用lambda函数进行评估。您可以确保它只使用一次评估:

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