这个问题可以被认为是以下问题的后续问题:C++ 临时变量生命周期。
Qt
容器支持stream-like
初始化语法。现在,当我编写以下代码时, myQVector
在赋值后立即被破坏,并且引用变得悬空。
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
声明临时对象的生命周期已延长以匹配对其的相应const
引用的生命周期。
但是,在这种情况下,临时对象QVector<QString>()
会提前销毁。
我想这可能是由于最后一个操作返回 aQVector<QString>&
并且不应该知道有关临时的生命周期的事实QVector<QString>
,但是这种解释并不严格并且可能是错误的。
那么,为什么会发生这种情况?