この質問は、次の質問のフォローアップと見なすことができます: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
、一時オブジェクトの存続期間は、それに対応する参照の存続期間と一致するように延長されると述べてconst
います。
ただし、この場合、一時オブジェクトQVector<QString>()
は以前に破棄されます。
QVector<QString>&
これはおそらく、最後の操作がaを返し、一時的なものの存続期間について何も知らないはずであるという事実が原因であると思いますQVector<QString>
が、この説明は厳密ではなく、間違っている可能性があります。
では、なぜこれが起こるのでしょうか?