Descargo de responsabilidad : conozco perfectamente la semántica del incremento de prefijo y postfijo. Así que por favor no me expliquen cómo funcionan.
Al leer las preguntas sobre el desbordamiento de la pila, no puedo evitar notar que los programadores se confunden con el operador de incremento de postfix una y otra vez. De esto surge la siguiente pregunta: ¿hay algún caso de uso en el que el incremento de postfix proporcione un beneficio real en términos de calidad de código?
Permítanme aclarar mi pregunta con un ejemplo. Aquí hay una implementación súper concisa de strcpy
:
while (*dst++ = *src++);
Pero ese no es exactamente el código más autodocumentado en mi libro (y produce dos advertencias molestas en compiladores sanos). Entonces, ¿qué hay de malo con la siguiente alternativa?
while (*dst = *src)
{
++src;
++dst;
}
Entonces podemos deshacernos de la asignación confusa en la condición y obtener un código completamente libre de advertencia:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Sí, lo sé, src
y dst
tendré diferentes valores finales en estas soluciones alternativas, pero dado que strcpy
regresa inmediatamente después del ciclo, no importa en este caso).
Parece que el propósito del incremento de postfix es hacer que el código sea lo más breve posible. Simplemente no veo cómo esto es algo por lo que debemos luchar. Si esto fue originalmente sobre rendimiento, ¿sigue siendo relevante hoy?
int c = 0; c++;
strcpy
método de esta manera (por razones que ya ha mencionado).