Ho esaminato questa pagina ma non sono in grado di ottenere il motivo per lo stesso. Là è detto che
"è più sensato che non restituisca alcun valore e richieda ai client di usare front () per ispezionare il valore all'inizio della coda"
Ma l'ispezione di un elemento da front () richiedeva anche che quell'elemento fosse copiato in lvalue. Ad esempio in questo segmento di codice
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * qui verrà creato temporaneo su RHS che sarà assegnato al risultato, e nel caso in cui se ritorni per riferimento, il risultato sarà reso non valido dopo l'operazione pop * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
sulla quinta riga, l' oggetto cout crea prima una copia di myqueue.front (), quindi la assegna al risultato. Allora, qual è la differenza, la funzione pop avrebbe potuto fare la stessa cosa.
front()
richiedeva anche la copia di quell'elemento in lvalue" - no, non lo è. front
restituisce un riferimento, non un valore. È possibile controllare il valore a cui si riferisce senza copiarlo.
pop()
. Se si utilizza, std::queue<T, std::list<T>>
non vi è alcuna preoccupazione che il riferimento fornito front()
venga invalidato da un file push()
. Ma devi conoscere il tuo modello di utilizzo e documentare i tuoi vincoli.
void std::queue::pop();
).