此问题可以视为对以下问题的后续处理: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“;' –