假設數我有一個方法:減少的參數
std::vector<double> minimize(double (*f)(const std::vector<double>& x))
,需要一個函數F(X)並發現X最小化它。假設我要最小化功能克(X,A)(相對於X),這也需要一個參數一個作爲參數:
double g(const std::vector<double>& x, const double a)
我怎麼能做到這一點(在C++ 11)如果僅在運行時才知道a的值,則使用方法最小化?
很好的答案,但它會更好,風格不使用默認的拍攝模式,也就是在這種情況下使用'[= A]'指示/確保只捕獲「a」。 – sgvd
這是什麼意思?這只是手動執行編譯器可以爲你做的事情,即弄清楚lambda體使用的是什麼。關於這一點,沒有什麼「好風格」。通過引用默認捕獲有點更狡猾,但這是價值。 – Puppy
通過值的默認捕獲可能*更多*狡猾,因爲你得到錯誤的安全性。 Meyers,有效的現代C++,第31項:'默認的按值捕獲誘使你認爲自己不受[懸空引用](你沒有)的影響,並且它讓你認爲你的封閉是自包含的(它們可能不是)「。最相關的是,如果'a'是一個成員變量:你*不*按值捕獲'a',而是'this'。如果你使用'[= a]',編譯器會給你一個錯誤,讓你想起它並希望它的危險('this'可能變成懸掛的,或者''a''可以在不同的線程中改變)。 – sgvd