此問題可以視爲對以下問題的後續處理:C++ temporary variable lifetime。C++ - 臨時變量及其生存期
Qt
容器支持stream-like
初始化語法。現在,當我編寫下面的代碼時,我的QVector
在賦值之後立即被破壞,並且引用變得懸而未決。
const QVector<QString>& v = QVector<QString>() << "X" << "Y" << "Z";
通訊operator<<
實現方式如下:
inline QVector<T> &operator<< (const T &t)
{ append(t); return *this; }
據我所知,10.4.10 Temporary Objects
指出,臨時對象的壽命延長到correspnding const
的壽命相匹配參考它。
但是,在這種情況下,臨時對象QVector<QString>()
被破壞較早。
我想這可能是由於最後一個操作返回QVector<QString>&
而不應該知道臨時QVector<QString>
的生命週期的事實,但這種解釋並不嚴格,可能是錯誤的。
那麼,爲什麼會發生這種情況呢?
「*我想這大概這是由於...... *「你大致正確,但技術解釋是,右值正在衰減爲左值。 – ildjarn
我認爲,'temporary'綁定到* operator << *的* *參數,但在'expression'結尾被銷燬。該標準只保證'臨時'綁定到* const ref *的生命時間,而不是'綁定到他們的臨時參考'。 –
我意識到你的問題可以滿足學術界的好奇心,但實際上,你可以讓'v'不是這樣的引用:'const QVector v = QVector ()<<「X」<<「Y」<<「 Z「;' –