私はこのページを通過しましたが、同じ理由を得ることができません。そこで言及されている
「値をまったく返さず、クライアントがfront()を使用してキューの先頭にある値を検査することを要求する方が賢明です」
しかし、front()から要素を検査するには、その要素を左辺値にコピーする必要もありました。たとえば、このコードセグメントでは
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ *ここで、結果に割り当てられるRHSに一時が作成されます。参照によって返される場合、ポップ操作後に結果が無効になります* /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
5行目で、coutオブジェクトは最初にmyqueue.front()のコピーを作成し、それを結果に割り当てます。だから、違いは何ですか、ポップ機能は同じことをしたかもしれません。
front()
その要素も左辺値にコピーする必要がありました」-いいえ、そうではありません。front
値ではなく参照を返します。コピーせずに、それが参照する値を検査できます。
pop()
。を使用する場合std::queue<T, std::list<T>>
、提供さfront()
れる参照がによって無効化されることについての心配はありませんpush()
。ただし、使用パターンを把握し、制約を文書化する必要があります。
void std::queue::pop();
)。