2015-11-19 49 views
2

給出這個小片段: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萬。我可以簡單地通過預先計算簡單地解決問題,我只想知道實際將發生什麼。 –

回答

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;}); 
}