[英]Why is a placeholder return type not allowed for coroutines?
用于特定协程的协程机器主要基于函数的返回类型。 返回类型是协程未来,协程逻辑将从中推断出协程承诺对象,该对象将用于将协程生成的实际值通过返回的未来传递给调用方。
这意味着co_await
, co_yield
和co_return
都没有实际使用协程的返回类型(顺便说一句,这就是为什么co_return
与return
拼写不同的原因;它具有不同的含义和行为,因此得到了不同的关键字)。 没有给co_return
和co_yield
本身指定未来类型。 他们给了诺言/未来可以封送给用户的类型。
而且co_await
表达式的类型几乎与协程的承诺/未来无关。 它只是协程可以通过其计划其恢复的值,并且可以从中提取某种任意类型的值。 计划的恢复实际上并不十分在乎当前协程的特定未来/承诺。 即使协程的未来/承诺类型不是任何类型的std::future
,也可以在std::future<T>
上co_await
。
因此,无法通过提供给任何这些关键字的表达式来推断协程的未来/承诺。 因此,您必须明确指定它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.