Disclaimer : Conheço perfeitamente a semântica do incremento de prefixo e postfix. Então, por favor, não me explique como eles funcionam.
Lendo perguntas sobre estouro de pilha, não posso deixar de notar que os programadores ficam confusos com o operador de incremento do postfix repetidas vezes. A partir disso, surge a seguinte pergunta: existe algum caso de uso em que o incremento do postfix fornece um benefício real em termos de qualidade do código?
Deixe-me esclarecer minha pergunta com um exemplo. Aqui está uma implementação super concisa de strcpy
:
while (*dst++ = *src++);
Mas esse não é exatamente o código mais auto-documentado do meu livro (e produz dois avisos irritantes sobre os compiladores sãos). Então, o que há de errado com a seguinte alternativa?
while (*dst = *src)
{
++src;
++dst;
}
Podemos então nos livrar da tarefa confusa na condição e obter um código completamente livre de aviso:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Sim, eu sei, src
e dst
terá valores finais diferentes nessas soluções alternativas, mas, como strcpy
retorna imediatamente após o loop, isso não importa nesse caso.)
Parece que o objetivo do incremento do postfix é tornar o código o mais conciso possível. Simplesmente deixo de ver como isso é algo pelo qual devemos nos esforçar. Se isso era originalmente sobre desempenho, ainda é relevante hoje?
int c = 0; c++;
strcpy
método dessa maneira (por razões que você já mencionou).