如何给lambda一个持续时间与lambda一样长的内部值?

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)