【发布时间】:2020-10-18 13:19:18
【问题描述】:
我想知道 co_awaiting 一个通过引用临时捕获的协程是否有效。那么下面的代码是否有效,我猜编译器应该把临时变量放在协程框架中作为局部变量:
task g(const S&);
task f() {
co_await g(S{});
}
在 clang 和 msvc (https://godbolt.org/z/HqHae8) 上,临时似乎在 g 恢复后被销毁,无论在 gcc (https://godbolt.org/z/hFWvU-) 上,临时似乎在初始挂起后被销毁。
【问题讨论】:
-
临时对象在完整表达式的末尾被销毁。如果没有协程,则意味着在 ; 之后。对于您的示例,我认为它必须在协程恢复之后,该 co_await 表达式仅在恢复之后结束。
标签: c++ c++20 c++-coroutine