C++ - временные переменные и их время жизни

Этот вопрос можно считать продолжением следующего вопроса: Время жизни временной переменной C++.

Контейнеры Qtподдерживают потоковыйсинтаксис инициализации.Теперь, когда я пишу следующий код, мой QVectorуничтожается сразу после присваивания, и ссылка становится оборванной.

const QVector& v = QVector() << "X" << "Y" << "Z";

Соответствующий операторреализован следующим образом:

inline QVector &operator<< (const T &t)
{ append(t); return *this; }

Насколько мне известно, 10.4.10 Temporary Objectsуказывает, что время жизни временного объекта продлевается до соответствовать времени жизни соответствующей constссылки на него.

Однако в этом случае временный объект QVector()уничтожается раньше.

Я предполагаю, что вероятно это происходит из-за того, что последняя операция возвращает QVector&и ничего не должно знать о времени жизни временного QVector, но это объяснение не является строгим и может быть неверным.

Итак, почему это происходит?

6
задан Community 23 May 2017 в 12:09
поделиться