コンパイラが特定のメンバー関数 ( など) を呼び出すことを決定するとint &std::vector<int>::front()、型システムは anint &が返されることしか認識しないため、その有効期間が所有者の一時的なものに制限されていても、それを左辺値として扱う必要があります。
C++11 より前は、メンバー関数が呼び出されているオブジェクトの値カテゴリに従ってオーバーロードすることはできませんでした ( What is "rvalue reference for *this"? を参照) 。物体; 非 const の一時的なものは明らかにそうではないconstので、非constオーバーロードが利用可能でなければなりません。
あなたが特定した潜在的にぶら下がっている左辺値参照と同様に、これは C++03 でoperator<<(メンバー関数演算子)ostreamで呼び出すことができますが、 (フリー演算子) では呼び出すことができない状況につながりました。C++11 では、右辺値参照の無料演算子オーバーロードとメンバー関数の右辺値オーバーロードでこれを修正しています。charstring*this
右辺値は、次*thisの 3 つのオーバーロードを許可しますfront。
T &front() & { return data_[0]; }
const T &front() const & { return data_[0]; }
T &&front() && { return std::move(data_[0]); }
右辺値のオーバーロードの別の関数本体は、少し疣贅です。これは、ref 修飾子が*thisメンバー関数の本体内のアクセスのメンバーに影響を与えないためです。