Я просмотрел эту страницу, но не могу понять причину того же. Там упоминается, что
"для него более разумно вообще не возвращать никакого значения и требовать от клиентов использования front () для проверки значения в начале очереди"
Но проверка элемента из 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 (), а затем присваивает ее результату. Итак, в чем разница, функция pop могла бы сделать то же самое.
front()
также требует, чтобы этот элемент был скопирован в lvalue» - нет, это не так. front
возвращает ссылку, а не значение. Вы можете проверить значение, к которому оно относится, не копируя его.
pop()
. Если вы используете, std::queue<T, std::list<T>>
то не стоит беспокоиться о том, что предоставленная ссылка front()
будет аннулирована файлом push()
. Но вы должны знать свой шаблон использования и задокументировать свои ограничения.
void std::queue::pop();
).