我想在lambdas和C ++ 0x中为每个(基于范围的for循环,而不是STL for_each)播放一些内容。所以我去了wiki并尝试使用lambdas重写wiki的例子:
std::vector<int> some_list;
some_list.push_back(42);
some_list.push_back(37);
int total = 0;
int value = 5;
for(int& x:some_list)
{
[](int x)
{
cout << "xL=" <<x <<endl;
};
}
for(auto x:some_list)
cout<< "x="<<x<<endl;
return result;
}
问题是我在lambda版本中没有看到任何cout,因为每个版本都很好地打印x ...我认为不可能为每个和lambdas混合,因为lambdas只能代替“功能“,不能充当循环体,但我不确定,所以如果有人能证实它会很酷
编译器:GCC 4.6
答案 0 :(得分:4)
你应该在lambda本身上调用operator()。
for(int& x:some_list)
{
[](int x)
{
cout << "xL=" <<x <<endl;
}(x); //notice the "()"
}
答案 1 :(得分:3)
在第一个“for
”中,你只创建lambda函数,而不是调用它。
实际上lambda函数在这里似乎没什么用处 - 你可能只是编写代码。但是,如果您仍想使用lambda,请在“()
”之后添加“}
”。
它在另一种情况下很有用 - 使用std::for_each
时。
答案 2 :(得分:2)
你正在使用一个普通的for
循环,它不期望一个lambda。花括号只是一个代码块,所以你要做的是为每次迭代定义lambda但不调用它。
您要做的是使用std::for_each
。