繁体   English   中英

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

[英]Why is a placeholder return type not allowed for coroutines?

根据C ++ 20的协程规范

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

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

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

这意味着co_awaitco_yieldco_return 都没有实际使用协程的返回类型(顺便说一句,这就是为什么co_returnreturn拼写不同的原因;它具有不同的含义和行为,因此得到了不同的关键字)。 没有给co_returnco_yield本身指定未来类型。 他们给了诺言/未来可以封送给用户的类型。

而且co_await表达式的类型几乎与协程的​​承诺/未来无关。 它只是协程可以通过其计划其恢复的值,并且可以从中提取某种任意类型的值。 计划的恢复实际上并不十分在乎当前协程的特定未来/承诺。 即使协程的未来/承诺类型不是任何类型的std::future ,也可以在std::future<T>co_await

因此,无法通过提供给任何这些关键字的表达式来推断协程的未来/承诺。 因此,您必须明确指定它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM