Я пройшов через це сторінку, але не можу зрозуміти причину того ж. Там це згадується
"розумніше взагалі не повертати значення і вимагати від клієнтів використовувати front () для перевірки значення в передній частині черги"
Але огляд елемента спереду () також вимагав копіювання цього елемента в lvalue. Наприклад, у цьому сегменті коду
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * тут буде створено тимчасове на RHS, якому буде призначено результат, а у випадку, якщо повернення за посиланням, результат буде визнаний недійсним після операції pop
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
на п'ятому рядку об'єкт cout спочатку створює копію myqueue.front (), а потім призначає це результату. Отже, яка різниця, поп-функція могла зробити те саме.
front()
також вимагає, щоб цей елемент був скопійований у lvalue" - ні, це не так. front
повертає посилання, а не значення. Ви можете перевірити значення, на яке воно посилається, не копіюючи його.
pop()
. Якщо ви використовуєте , std::queue<T, std::list<T>>
то немає ніякого занепокоєння з приводу посилання , наданої від front()
того анульовано push()
. Але ви повинні знати свою схему використання та повинні документувати свої обмеження.
void std::queue::pop();
).