【发布时间】:2015-04-12 23:04:58
【问题描述】:
我想要一个变量,我可以在 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';
});
}
但是,我希望能够做到这一点,而无需在 lambda 之外声明 sum 变量。像这样的:
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';
});
所以sum 仅在 lambda 内可见,而不是在封闭范围内。在 C++11/14 中可以吗?
【问题讨论】:
-
删除
auto并将11替换为14就可以了。 -
@KerrekSB 太棒了!谢谢:)