什么是 noop 协程?

What is a noop coroutine?

C++20 标准在 [coroutine.noop] 中定义了“noop 协程”。它是什么? 它与主体为 { co_return; } 的函数有何不同?

更新

感谢您提供提案和标准的链接。从这些参考资料中总结,“noop 协程”是 resume()(或 operator())和 destroy() 方法没有副作用的协程。

但是 destroy() 在用户编写的协程上总是(我认为!)有副作用,即破坏协程并进一步调用协程句柄方法,包括 resume()destroy() 现在将是未定义的行为,这与无副作用行为不同。

综上所述,没有办法写出 destroy() 没有副作用的协程,只有库提供的 noop 协程才有这个 属性,对吗?

(欢迎更新答案,以回应我问题的这次更新。)

这是在这里提出的:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0913r1.html

基本上,这个想法是

Having such a coroutine handle allows library writer to perform either symmetric or asymmetric control transfer based on runtime considerations.

以下代码说明了这个想法(来自同一个提案):

struct Awaiter {
   ...
   auto await_suspend(coroutine_handle<> h) {
     ...
     return cond ? next_coro : noop_coroutine(); 
   }
 };

这与手写的 noop 协程不一定不同,但是为您预定义了一个非常方便。