2017-05-11 51 views
2

對於lambda表達式,默認情況下使用命名捕獲與參考之間的區別是什麼?默認情況下Lambda捕獲參考vs命名爲

像這樣:

std::vector<int> object; 
std::vector<int> otherObject; 

auto fun = [&](const int& i){ object.push_back(i); }; 

相比:

auto fun = [&object](const int& i){ object.push_back(i); }; 
+0

傳遞'int'作爲const引用沒有任何好處。 –

回答

2

http://en.cppreference.com/w/cpp/language/lambda#Explanation

[&]捕獲由參考在lambda的主體中使用的所有自動變量如果存在,則通過參考當前對象

只要你的lambda只使用object這兩個例子在技術上是等價的。然而,它們的不同之處在於,如果修改lambda表達式以使它們需要額外捕獲的對象,則需要手動將它們添加到第二個示例的捕獲塊中,但不是第一個。

+0

那麼,引用的默認值只會處理所有情況下lambda體中使用的變量?因此,與指定案例相比,對性能或其他任何方面都沒有缺點? –

+0

@CJ_macar這就是文檔指出的。 –