C++ 什么是noop合作计划?
C++20标准在中定义了一个“noop协程”。这是怎么一回事? 它与主体为C++ 什么是noop合作计划?,c++,language-lawyer,c++20,c++-coroutine,C++,Language Lawyer,C++20,C++ Coroutine,C++20标准在中定义了一个“noop协程”。这是怎么一回事? 它与主体为{co_return;}的函数有何不同 更新 感谢您提供该提案和标准的链接。从这些参考文献中总结,“noop协同程序”是指resume()(或operator())和destroy()方法没有副作用的程序 但是用户编写的协同程序上的destroy()总是(我认为!)有一个副作用,即销毁协同程序和进一步调用协同程序句柄方法,包括resume()和destroy()现在将是未定义的行为,这与没有副作用的行为不同 总之,没有办法
{co_return;}
的函数有何不同
更新
感谢您提供该提案和标准的链接。从这些参考文献中总结,“noop协同程序”是指resume()
(或operator()
)和destroy()
方法没有副作用的程序
但是用户编写的协同程序上的destroy()
总是(我认为!)有一个副作用,即销毁协同程序和进一步调用协同程序句柄方法,包括resume()
和destroy()
现在将是未定义的行为,这与没有副作用的行为不同
总之,没有办法编写一个协同程序,使得destroy()
没有副作用,并且只有noop协同程序提供的库才具有此属性,对吗
(欢迎更新答案,作为对我问题更新的回应。)此处建议:
基本上,这个想法是
拥有这样一个协程句柄允许库编写器执行
基于运行时的对称或非对称控制传输
考虑因素
以下代码说明了这一想法(来自同一提案):
结构等待器{
...
自动等待挂起(协同路由句柄h){
...
返回条件?下一步:noop_coroutine();
}
};
这不一定与手写的noop协同程序不同,但是已经为您预定义了一个,这非常方便。您能提供标准中提到的参考信息吗?
struct Awaiter {
...
auto await_suspend(coroutine_handle<> h) {
...
return cond ? next_coro : noop_coroutine();
}
};