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

为何std::coroutine_handle采用静态成员函数而非构造函数创建对象?

为何std::coroutine_handle采用from_promise静态函数而非直接构造函数?

我在<coroutine>头文件中看到,std::coroutine_handle拥有以下两个构造函数:

constexpr coroutine_handle() noexcept { }
                                                   
constexpr coroutine_handle(nullptr_t) noexcept { }

同时它还有一个静态成员函数:

static coroutine_handle
from_promise(_Promise& __p)
{
  coroutine_handle __self;
  __self._M_fr_ptr
    = __builtin_coro_promise((char*) &__p, __alignof(_Promise), true);
  return __self;
}

这个from_promise函数的作用是创建一个_M_fr_ptr成员已完成赋值的std::coroutine_handle对象。我对此产生了疑问:为什么不直接用如下的构造函数来替代from_promise呢?

coroutine_handle(_Promise& __p)
  : _M_fr_ptr{__builtin_coro_promise((char*) &__p, __alignof(_Promise), true)}
{}

考虑到现有实现的复杂度,我认为这个设计决策必然是经过深思熟虑的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:06