首页  >  文章  >  后端开发  >  为什么我不能将非常量引用传递给 `std::async` 以及如何解决它?

为什么我不能将非常量引用传递给 `std::async` 以及如何解决它?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-28 12:18:30947浏览

Why can't I pass a non-const reference to `std::async` and how do I work around it?

通过引用传递给 std::async 的参数中的不兼容性

无法将非常量引用作为参数传递给 std: :async 让开发人员感到困惑。考虑以下示例:

<code class="cpp">#include <functional>
#include <future>

void foo(int& value) {}

int main() {
    int value = 23;
    std::async(foo, value);
}</code>

编译器报告此代码的错误:

error: no type named ‘type’ in ‘class std::result_of<void (*)(int)>()’

将参数封装在 std::reference_wrapper 中可以解决问题,但会引发有关底层的问题

基于值的参数传递背后的原因

std::async 的设计有意默认为按值传递所有参数。此选择可确保安全,因为参数的副本不会成为悬空或表现出竞争条件。

处理非常量引用参数

但是,在某些情况下传递参数通过非常量引用是必要的。这就是 std::ref 发挥作用的地方。 std::ref 允许开发人员明确选择传递非常量引用的危险语义,承认他们对潜在后果的理解。

以上是为什么我不能将非常量引用传递给 `std::async` 以及如何解决它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn