gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:52:12 26 4
gpt4 key购买 nike

我想要一个可以在 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 中是否可行?

最佳答案

C++14 引入了广义 Lambda 捕获,让您可以随心所欲。

捕获将从 init 表达式的类型推导出来,就好像通过 auto 一样。

[sum = 0] (int value) mutable {
// 'sum' has been deduced to 'int' and initialized to '0' here.
/* ... */
}

关于c++ - 如何给 lambda 一个持续时间与 lambda 一样长的内部值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com