gpt4 book ai didi

c++ - co_await 运算符实际上做了什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:27 26 4
gpt4 key购买 nike

我在 Internet 上进行了搜索,试图找到 co_await 运算符的作用,但我仍然无法理解。我猜是下面的代码:

co_await foo();

暂停协程直到 foo 完成,但在这种情况下它与简单地调用 foo 有何不同:

foo();

这也会挂起当前函数,直到 foo 完成。请解释一下。

最佳答案

如果函数至少包含一个co_await运算符,整个函数被认为是协程。它的所有范围变量(包括参数)都存储在堆上,而不是堆栈上。这使得暂停函数执行而不丢失其状态并在需要时恢复成为可能。此外,协程在第一次挂起时将控制权返回给调用者,并在第一次 return 时完成。陈述。由于它返回未完成,因此返回类型必须是“等待类型”,例如 std::future<int> . (C++ 允许您创建自己的可等待类型 - 这太棒了!)调用者可以订阅/co_await关于功能完成。

重要的是要注意暂停的功能可能会在任何时间和任何线程上恢复和完成;细节取决于实现。

在您的示例中,当您编写 co_await foo() 时,您将仅在 foo 之后到达下一行已完成执行,此行可能会在另一个线程中执行,但是写入 foo() , 将在 foo() 时进入下一行仅在同一个线程中挂起,您不会收到有关其完成的任何反馈。

关于c++ - co_await 运算符实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954609/

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