gpt4 book ai didi

c++ - 可变 lambda 是否有自己的捕获值拷贝?

转载 作者:行者123 更新时间:2023-11-30 02:15:45 26 4
gpt4 key购买 nike

std::function<void()> create_function (args...)
{
int x = initial_value (args...);

return [x] () mutable
{
std::cout << x++ << std::endl;
};
}

我发现我需要在 lambda 上使用 mutable 关键字,否则 x 是 const。

如果我多次调用 create_function,返回的函数对象是否每个都有自己的 x 拷贝还是共享?

澄清一下,如果我想要 C++11 之前的这种功能,我必须编写一个类来封装捕获,在这种情况下我可以选择制作 x成员变量或全局/静态。如果 x 是 const 那就没关系了。语言如何针对 lambda 的不同实例指定 x 的存储?

最佳答案

mutable 如果捕获的值是值或引用则不会改变。它只会改变常量。

您可以指定在 lambda 捕获中是要值(拷贝)还是引用:

return [x] () mutable  // copies
{
std::cout << x++ << std::endl;
};

return [&x] () mutable // references
{
std::cout << x++ << std::endl;
};

Lambda 捕获总是建模为非静态数据成员,如果那是您的困惑。

关于c++ - 可变 lambda 是否有自己的捕获值拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55796405/

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