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

C++协程promise_type未声明return_void和return_value是否合法?

C++协程promise_type可省略return_void/return_value的合法性确认

结论先行:对于永远不会执行到协程体末尾的场景(比如无限while(true)循环中持续执行co_yield的协程),其promise_type完全可以不声明return_void和return_value函数,这是符合C++标准的合法写法。

标准规则解读

C++标准仅明确禁止在promise_type中同时声明return_void和return_value(原文:“若在promise_type的作用域中同时找到return_void和return_value的声明,则程序是病态的”),但从未规定这两个函数必须至少存在一个。

底层逻辑支撑

协程只有在正常执行到体末尾时,才会根据协程的返回类型(有无返回值)调用对应的return_void或return_value。如果协程永远不会走到结束点(比如无限循环挂起),编译器不会生成调用这两个函数的代码路径,因此函数缺失不会触发编译错误或未定义行为。

注意事项

必须确保协程不存在任何能执行到体闭合}的路径。一旦存在这种可能,编译器会因找不到对应的return函数直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:33:08