寫作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似乎延長了外部對象及其他數據成員的生命週期。
雖然幾乎可以肯定作者的意圖,但我想確切地知道,語言保證這是安全的。