gpt4 book ai didi

c++ - 捕获参数是从右值 lambda 复制的吗?

转载 作者:行者123 更新时间:2023-12-02 17:23:34 27 4
gpt4 key购买 nike

在 lambda 转换为 std::function 期间是否复制了捕获的参数?
我需要将捕获不可复制类型的 lambda 转换为 std::function .
所以我将 lambda 传递给 std::function作为右值,但发生了错误。

// Foo is non-copyable.
auto a = [f = Foo()]{ };
std::function<void()> b = std::move(a) // error, calls deleted Foo::Foo(const Foo&);

最佳答案

是的, std::function 要求函数对象为 CopyConstructible并且不能与仅移动函数对象一起使用。

Type requirements

您可以将 lambda 包装为 std::reference_wrapper 喜欢 std::function<void()> b = std::ref(a); ,但是你必须小心 lambda 对象的生命周期。或者您可以尝试停止使用std::function并直接使用 lambda;特别是在模板上下文中。

关于c++ - 捕获参数是从右值 lambda 复制的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494981/

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