C++ C++;-临时变量及其生存期
此问题可被视为以下问题的后续问题:C++ C++;-临时变量及其生存期,c++,qt,variables,destructor,lifetime,C++,Qt,Variables,Destructor,Lifetime,此问题可被视为以下问题的后续问题: Qt容器支持类流的初始化语法。现在,当我编写下面的代码时,我的QVector在赋值之后立即被销毁,引用变得悬空 const QVector<QString>& v = QVector<QString>() << "X" << "Y" << "Z"; const QVector&v=QVector()只有当临时文件绑定到const引用时,它的生存期才会延长: const QVector<
Qt
容器支持类流的初始化语法。现在,当我编写下面的代码时,我的QVector
在赋值之后立即被销毁,引用变得悬空
const QVector<QString>& v = QVector<QString>() << "X" << "Y" << "Z";
const QVector&v=QVector()只有当临时文件绑定到const引用时,它的生存期才会延长:
const QVector<QString>& v = QVector<QString>();
常量QVector&v=QVector();
但是,在您的代码中,您没有将临时文件绑定到任何东西。相反,您正在调用(临时的)成员函数,该函数返回(临时的)引用。此函数调用的结果不再是一个临时对象,而只是一个普通引用。原始临时对象在其出现的完整表达式结束时过期,引用v
变为悬空
const QVector<QString>& v = QVector<QString>() << "X" << "Y" << "Z";
(在新的C++中,有可能通过Ruffic合格的成员函数来禁止这种“意外”,也就是说,您可以<代码>删除/> > <代码>的“RValm版本”,我猜这可能是由于…你大致上是正确的,但技术上的解释是右值正在衰减为左值。我认为,
临时
绑定到运算符返回的引用。我知道你的问题满足学术好奇心,但实际上,你可以这样做:const QVector v=QVector()@Robᵩ : 这里有一些不纯粹是学术性的微妙之处,例如(auto-foo:QVector()的)