ack*_*ckh 2 c++ coroutine c++-winrt c++-coroutine
我想知道下面的代码是否是有效的 C++ 代码,或者如果不使用co_return会导致未定义的行为。
IAsyncAction MyClass::MyCoroutine()
{
co_await someOtherClassInstance.SomeCoroutine();
}
Run Code Online (Sandbox Code Playgroud)
即是否需要将代码调整如下?
IAsyncAction MyClass::MyCoroutine()
{
co_await someOtherClassInstance.SomeCoroutine();
co_return;
}
Run Code Online (Sandbox Code Playgroud)
如果行为不是未定义的,那么最佳实践是什么(总是添加co_return或不添加)以及这样做的理由是什么?
省略该co_return;语句在这里得到了明确的定义。根据[stmt.return.coroutine],只要p.return_void()是有效的表达式(其中p是承诺类型),就允许这样做。
C++/WinRT 实现了return_void()and IAsyncAction(IAsyncActionWithProgress或者更确切地说是这些的内部等待适配器结构)。
由于该co_return;声明在这里纯粹是可选的,因此是否使用它取决于个人喜好。就我个人而言,我更喜欢阅读co_return;存在该语句的代码,原因如下: