Kia*_*ian 3 c++ lambda c++11 c++14
我想在lambda中修改一个变量而不影响封闭范围.表现得像这样的东西:
std::vector vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
{
auto sum = 0;
std::for_each(vec.begin(), vec.end(), [sum](int value) mutable
{
sum += value;
std::cout << "Sum is up to: " << sum << '/n';
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够在不声明sumlambda之外的变量的情况下完成它.像这样的东西:
std::vector vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
std::for_each(vec.begin(), vec.end(), [auto sum = 0](int value) mutable
{
sum += value;
std::cout << "Sum is up to: " << sum << '/n';
});
Run Code Online (Sandbox Code Playgroud)
因此sum只能在lambda内部看到,而不是在封闭的范围内.在C++ 11/14中是否可行?
Snp*_*nps 10
C++ 14引入了通用Lambda Capture,可以让你做你想做的事.
捕获将从init表达式的类型推断出来,如同auto.
[sum = 0] (int value) mutable {
// 'sum' has been deduced to 'int' and initialized to '0' here.
/* ... */
}
Run Code Online (Sandbox Code Playgroud)