为何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
相关产品推荐
相关产品推荐

