【问题标题】:c++ coroutines temporaries in co_await expressionsc ++ coroutines co_await表达式中的临时变量
【发布时间】: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


【解决方案1】:

MSVC 和 Clang 是对的,临时变量在完整表达式结束时被销毁。

对于 GCC,这是错误 95599。显然这个错误正在修复中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-08
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2014-02-20
    相关资源
    最近更新 更多