You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Coroutine final_suspend未定义行为解析及场景问询

关于C++协程final_suspend未定义行为的疑问

若协程因未捕获异常终止,会执行以下操作:

  • 捕获异常并在catch块中调用promise.unhandled_exception()
  • 调用promise.final_suspend()并co_await其结果(例如恢复续体或发布结果)。从此点恢复协程属于未定义行为。

(参考cppreference中C++协程相关章节)

我对上述第二点存在困惑:文中提到final_suspend可用于恢复续体,却又指出从此点恢复协程属于未定义行为,这看似矛盾。现明确以下场景是否属于未定义行为:

  1. 在final_suspend的函数体内直接或间接调用coroutine_handle的resume()?
  2. 在final awaiter的await_suspend函数体内直接或间接恢复coroutine_handle?
  3. 从final awaiter的await_suspend返回coroutine_handle?

若上述某一或全部场景属于未定义行为,该规则是否仅适用于unhandled_exception后的final_suspend,还是同样适用于return_void或return_value后的final_suspend?

我已针对场景3编写了示例代码,请问该示例中的异常与续体处理是否存在未定义行为?


内容的提问来源于stack exchange,提问作者Wutz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:38:14