cs-*_*cs- 2 c++ language-lawyer c++20 c++-coroutine
C++20 标准在[coroutine.noop] 中定义了一个“noop 协程” 。它是什么?它与 body 为 的函数{ co_return; }有何不同?
更新
感谢您提供提案和标准的链接。从这些参考资料中总结一下,“noop 协程”是resume()(or operator()) 和destroy()方法没有副作用的协程。
但是,destroy()在总用户编写的协同程序(我想!)有一个副作用,即破坏了协同程序,并进一步呼吁协程处理方法,包括resume()和destroy()现在将是不确定的行为,这比没有副作用的行为不同。
总之,没有办法编写一个destroy()没有副作用的协程,只有库提供的noop协程才有这个属性,对吗?
(欢迎更新答案,以回应我的问题的更新。)
这是在这里提出的:http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0913r1.html
基本上,这个想法是
拥有这样的协程句柄允许库编写者基于运行时考虑执行对称或非对称控制传输。
以下代码说明了这个想法(来自同一个提案):
struct Awaiter {
...
auto await_suspend(coroutine_handle<> h) {
...
return cond ? next_coro : noop_coroutine();
}
};
Run Code Online (Sandbox Code Playgroud)
这不一定与手写的 noop 协程不同,但是为您预定义一个协程非常方便。