所以我试图测试一个 lambda 在它使用的范围内访问局部变量,大致基于 Bjarne 在 C++0x FAQS 页面上的一个简单示例: http ://www2.research.att.com/ ~bs/C++0xFAQ.html#lambda
当我尝试这个简单的测试代码时:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//Test std::fill() with C++0x lambda and local var
void f (int v) {
vector<int> indices(v);
int count = 0;
fill(indices.begin(), indices.end(), [&count]() {
return ++count;
});
//output test indices
for (auto x : indices) {
cout << x << endl;
}
}
int main() {
f(50);
}
我得到错误:
required from 'void std::fill(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >, _Tp = f(int)::<lambda()>]'
我假设这个 errmsg 表明 std::fill() 签名需要一个 const Type& 才能用于新的值元素分配。
但是,如果我能够为此目的使用 fill(),如 Bjarne 的示例所示,我不需要在 lambda 捕获子句中使用引用 '[&count]' 来重新分配原始通过'return ++count;'索引元素值和递增计数var lambda 语句块?
我承认我还不太了解这些 lambda!:)