何时评估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);});
}
答
我怀疑a/b
将在每次调用lambda函数进行评估。您可以确保它只使用一次评估:
Foo::fooify(vector<float>& bar){
float a = getA();
float b = getB();
float ab = a/b;
map(bar, [](float c){c*ab;});
}
你怎么能区分?如果你分辨不清,那么你究竟在问什么? –
区别在于,在第一种情况下,将会有一项划分操作,第二种情况下将会有200万。我可以简单地通过预先计算简单地解决问题,我只想知道实际将发生什么。 –