C++20标准在[coroutine.noop]中定义了一个"noop“。那是什么?它和身体是{ co_return; }的函数有什么不同?
更新
感谢您对提案和标准的链接。综上所述,"noop“是resume() (或operator())和destroy()方法没有副作用的一种。
但是destroy()总是在用户写的协同线上(我想!)有一个副作用,即破坏协同,并进一步调用协同处理方法,包括resume()和destroy(),现在将是未定义的行为,这不同于无副作用行为。
总之,没有办法编写这样的协同线,使destroy()没有副作用,而且只有库提供的noop具有此属性,对吗?
(欢迎对我问题的最新答复作出答复。)
发布于 2020-07-27 21:01:04
这是在这里提出的: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();
}
};这并不一定与手写的noop coroutine不同,但是已经为您预先定义了一个是非常方便的。
https://stackoverflow.com/questions/63123373
复制相似问题