1
我想從lambda函數傳出一些參數,所以我將引用參數綁定到lambda函數。但是,調用該函數後,外部變量不會更改。如果我將lambda函數與外部變量的指針綁定,那麼結果是正確的。在lambda函數綁定中傳遞引用的奇怪行爲
我顯示測試程序如下,並且想知道爲什麼外層變量不會改變,因爲我已經定義了傳遞參考lambda函數[&]
?
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main(int argc, char* argv[])
{
string acc_ref, acc_ptr;
// define function via reference
auto fProcRefEx = [&](string& acc, const string& s) -> void
{
acc += s;
};
auto fProcRef = bind(fProcRefEx, acc_ref, placeholders::_1);
// define function via pointer
auto fProcPtrEx = [&](string* pacc, const string& s) -> void
{
(*pacc) += s;
};
auto fProcPtr = bind(fProcPtrEx, &acc_ptr, placeholders::_1);
// test
vector<string> v = {"abc", "def"};
for_each(v.begin(), v.end(), fProcRef);
cout << "acc_ref: " << acc_ref << endl; // acc_ref is empty, wrong
for_each(v.begin(), v.end(), fProcPtr);
cout << "acc_ptr: " << acc_ptr << endl; // acc_ptr is "abcdef", correct
return 0;
}
另外,'for(auto && str:v){fProcRef(str); }'和'std :: foreach(v.begin(),v.end(),fProcRef)'''一樣有效,並且通常更清晰。 – Yakk