写作const auto& [a, b] = f();
保证延长从f()
返回的对象的寿命,还是至少要将对象a
和b
绑定到?通过the proposal阅读我没有在语言中看到任何明显的东西,以确保它不会被其他东西所覆盖。但是,下列情况不延长临时的寿命,所以我看不出它如何被覆盖:在结构化绑定中执行const引用是否延长分解对象的生命周期?
const auto& a = std::get<0>(f());
在这似乎表明,它覆盖纸顶部
的cv修饰符和分解声明的REF-限定符被施加到引入用于初始化的基准,而不是为单独的构件别名
但在拟议措辞的实际标准,最接近提我看到的是贝洛W,虽然我不知道该如何解读它让我在寻找担保:
如果e是一个加括号的ID表达从命名的标识符列表介绍了一个左或引用 分解声明, decltype(e)是如在 说明书中给出的分解声明
似乎gcc和铛既延长对象的生命周期返回直到范围的端部基于所述引用的类型一个wandbox experiment。为我自己的类型实现所有的花里胡哨的uglier one似乎延长了外部对象及其他数据成员的生命周期。
虽然几乎可以肯定作者的意图,但我想确切地知道,语言保证这是安全的。