这个问题可以视为对以下问题的跟进:C++临时变量生命周期。
据我所知,
然而,在这种情况下,临时对象
Qt
容器支持类似流的初始化语法。现在,当我编写以下代码时,我的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 临时对象
规定临时对象的生命周期将被延长以匹配相应的const
引用的生命周期。然而,在这种情况下,临时对象
QVector<QString>()
会更早地被销毁。
我猜这可能是因为最后一次操作返回了QVector<QString>&
,并且不应该知道临时QVector<QString>
的生命周期,但这个解释并不严谨,可能是错误的。
那么,为什么会发生这种情况呢?
temporary
绑定到operator <<返回的引用,但在表达式结束时它被销毁。标准只保证将temporary
绑定到const ref的生命周期,而不保证与其绑定的temporary's references
的生命周期。 - Ramadheer Singhv
不是一个引用:const QVector<QString> v = QVector<QString>() << "X" << "Y" << "Z";
- Robᵩfor (auto foo : QVector<QString>() << "X" << "Y" << "Z") { ... }
无法正常工作。 - ildjarn