この質問は、次の質問へのフォローアップと見なすことができます:C++ temporary variable lifetime。C++ - 一時変数とその寿命
Qt
コンテナは、stream-like
初期化構文をサポートします。今、次のコードを書くと、私のQVector
は代入の直後に破棄され、参照がぶら下がってしまいます。 、私の知る限りでは
inline QVector<T> &operator<< (const T &t)
{ append(t); return *this; }
10.4.10 Temporary Objects
は一時オブジェクトの寿命はcorrespnding const
の寿命と一致するように拡張されていることを述べ、次のように実装されoperator<<
対応
const QVector<QString>& v = QVector<QString>() << "X" << "Y" << "Z";
それを参照してください。
ただし、この場合、一時オブジェクトQVector<QString>()
は先に破棄されます。
は、私はおそらくこれが原因最後の操作がQVector<QString>&
を返し、一時的QVector<QString>
の寿命については何も知らないはずですが、この説明は厳密ではなく、間違っているかもしれないという事実のために起こることを推測します。
これはどうしてですか?それはのconst参照にバインドされている場合は、一時の
「*私はおそらく推測します*あなたはおおよそ正しいですが、技術的な説明は右辺値が左辺値に崩壊していることでしょう。 – ildjarn
私は、 'temporary'は* operator << *の* returned *参照にバインドされていますが、' expression'の最後では破棄されると思います。標準では、一時的な参照のみではなく、const ref *のライフタイムにバインドされた 'temporary 'を保証しています。 –
私はあなたの質問が学問的な好奇心を満たすことを実感しますが、実際には、このように 'v'を参照することはできません。' const QVector v = QVector ()<< "X" << "Y" << " Z "; ' –