Passei por esta página, mas não sou capaz de entender o motivo. Lá é mencionado que
"é mais sensato não retornar nenhum valor e exigir que os clientes usem front () para inspecionar o valor na frente da fila"
Mas a inspeção de um elemento de front () também exigia que esse elemento fosse copiado em lvalue. Por exemplo, neste segmento de código
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * aqui temporário será criado no RHS que será atribuído ao resultado e, se retornos por referência, o resultado será invalidado após a operação pop * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
na quinta linha, o objeto cout cria primeiro uma cópia do myqueue.front () e depois atribui isso ao resultado. Então, qual é a diferença, a função pop poderia ter feito a mesma coisa.
front()
também requer que esse elemento seja copiado em lvalue" - não, não é. front
retorna uma referência, não um valor. Você pode inspecionar o valor a que se refere sem copiá-lo.
pop()
. Se você usar std::queue<T, std::list<T>>
, não há nenhuma preocupação sobre a referência fornecida front()
ser invalidada por a push()
. Mas você deve conhecer seu padrão de uso e documentar suas restrições.
void std::queue::pop();
).