让以下内容成为协程:
ReturnType foo(Args args)
以及以下调用场景:
void caller() {
ReturnType ret = foo(...);
}
据我调用协程 foo 后的理解:
promise_type promise{...};
如果 foo 被挂起,现在是否有一个 return 语句将 retun_object 返回给调用者?可能有返回值优化?
如果 foo 没有挂起,我想协程需要将 return_object 存储在协程激活帧上,可能存储在协程激活帧的堆栈或堆部分上,然后在挂起的第一个点或 co_return 处,有一个返回 return_object将对象返回给调用者的语句。我说得对吗?
如果 foo 被挂起,现在是否有一个 return 语句将 retun_object 返回给调用者?
没有必要。对
get_return_object
的调用已经填充了调用者的返回值。如果协程需要存储返回对象(或更可能的是,存储实际返回值,并将给定的值指向它的调用者),那么它有机会在 get_return_object
中这样做。这就是这个函数的用途for。
与任何函数的返回值一样,它位于调用者的堆栈上,而不是函数本身。