Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是noop合作计划?_C++_Language Lawyer_C++20_C++ Coroutine - Fatal编程技术网

C++ 什么是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()现在将是未定义的行为,这与没有副作用的行为不同 总之,没有办法

C++20标准在中定义了一个“noop协程”。这是怎么一回事? 它与主体为
{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(); 
   }
 };