對於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); };
對於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); };
從http://en.cppreference.com/w/cpp/language/lambda#Explanation:
[&]捕獲由參考在lambda的主體中使用的所有自動變量如果存在,則通過參考當前對象
只要你的lambda只使用object
這兩個例子在技術上是等價的。然而,它們的不同之處在於,如果修改lambda表達式以使它們需要額外捕獲的對象,則需要手動將它們添加到第二個示例的捕獲塊中,但不是第一個。
那麼,引用的默認值只會處理所有情況下lambda體中使用的變量?因此,與指定案例相比,對性能或其他任何方面都沒有缺點? –
@CJ_macar這就是文檔指出的。 –
傳遞'int'作爲const引用沒有任何好處。 –