Revisé esta página pero no puedo obtener el motivo de la misma. Allí se menciona que
"Es más sensato que no devuelva ningún valor y que requiera que los clientes usen front () para inspeccionar el valor al principio de la cola"
Pero inspeccionar un elemento desde front () también requería que ese elemento se copiara en lvalue. Por ejemplo, en este segmento de código
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * aquí se creará temporal en RHS que se asignará al resultado, y en caso de que se devuelva por referencia, el resultado se invalidará después de la operación pop * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
en la quinta línea, el objeto cout primero crea una copia de myqueue.front () y luego lo asigna al resultado. Entonces, cuál es la diferencia, la función pop podría haber hecho lo mismo.
front()
también requería que ese elemento se copiara en lvalue", no, no es así. front
devuelve una referencia, no un valor. Puede inspeccionar el valor al que se refiere sin copiarlo.
pop()
. Si lo usa std::queue<T, std::list<T>>
, no hay ninguna preocupación acerca de que la referencia proporcionada front()
sea invalidada por un push()
. Pero debes conocer tu patrón de uso y documentar tus limitaciones.
void std::queue::pop();
).