在此頁面Range-based for loop on a temporary range中,用戶 Barry 提到以下內容不受被破壞的臨時物件的影響,并且我測驗了成員 v 確實存在于整個 for 回圈中(因為沒有呼叫解構式 ~X在整個 for 回圈中)。誰能為我解釋一下為什么?非常感謝!
struct X {
std::vector<int> v;
~X()
{
}
};
X foo()
{
return X();
}
for (auto e : foo().v) {
// ok!
}
uj5u.com熱心網友回復:
這是一種晦澀的臨時延長壽命形式。通常,您必須將臨時物件直接系結到參考以使其作業(例如for (auto x : foo())),但根據 cppreference,此效果通過以下方式傳播:
- 括號
( )(分組,不是函式呼叫), - 陣列訪問
[ ], - 會員訪問
.,.*, - 三元運算子
? : - 逗號運算子
,。 - 任何不涉及“用戶定義的轉換”的轉換(可能不使用建構式或轉換運算子)
即如果a.b系結到一個參考,生命周期a就會延長。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486131.html
標籤:C
上一篇:如何使用fmt列印字符向量?
下一篇:如何讀取檔案并將其寫入字串c
