为什么协程不允许使用占位符返回类型?

Why is a placeholder return type not allowed for coroutines?

本文关键字:占位符 返回类型 不允许 为什么      更新时间:2023-10-16

根据 C++20 的协程规范:

使用返回类型

声明的函数,该返回类型使用 占位符类型不应为协程。

为什么在这种情况下不允许使用占位符类型?

用于特定协程的协程机制主要基于函数的返回类型。返回类型是协程未来,协程逻辑将从中推断出协程承诺对象,该对象将用于通过返回的未来将协程生成的实际值传递给调用方。

这意味着在co_awaitco_yieldco_return中,它们实际上都没有使用协程的返回类型(顺便说一句,这就是为什么co_return的拼写与return不同;它具有不同的含义和行为,因此它得到了不同的关键字(。co_returnco_yield没有被赋予未来类型本身;他们被赋予一种类型,承诺/未来可以封送给用户。

co_await表达式的类型与协程的承诺/未来几乎没有关系。它只是一个值,协程可以通过该值安排其恢复,并从中提取某种任意类型的值。计划的恢复并不真正关心当前协程的特定未来/承诺。你可以在std::future<T>co_await,即使你的协程的未来/承诺类型不是任何类型的std::future

因此,无法从提供给任何这些关键字的表达式中推断出协程的未来/承诺应该是什么。因此,必须显式指定它。

相关文章: