Las dos formas reflejan diferentes puntos de vista en la asignación.
El primer caso trata la asignación (al menos la interna) como un operador (una función que devuelve un valor).
El segundo caso trata la asignación como una declaración (un comando para hacer algo).
En algunos casos, la asignación como operador tiene su punto, sobre todo por brevedad, o para usar en contextos que esperan un resultado. Sin embargo, lo siento confuso. Por varias razones:
- Operador de asignación son básicamente operadores de efectos secundarios, y hoy en día es un problema optimizarlos para los compiladores. En idiomas como C y C++ llevan a muchos casos de Comportamiento no definido o código no optimizado.
- No está claro qué debería devolver. ¿Debería el operador de asignación devolver el valor asignado, o debería devolver la dirección del lugar donde se almacenó? Uno u otro podría ser útil, según el contexto.
- Con asignaciones compuestas como
+=
, es aún peor. No está claro si el operador debe devolver el valor inicial, el resultado combinado o incluso el lugar donde se almacenó.
La asignación como una declaración a veces conduce a variables intermedias, pero ese es el único inconveniente que veo. Está claro y los compiladores saben cómo optimizar de manera eficiente estas declaraciones sucesivas.
Básicamente, evitaría la asignación como operador siempre que sea posible. El caso presentado es muy simple y no es realmente confuso, pero como regla general, preferiría.
i = 0
j = 0
o
i, j = 0, 0
para los idiomas que soporta, asignación paralelo.
no hablar de 'char * i, j; 'contra' char * i, * j; '. –
@Ignacio: Buena pregunta anterior relacionada con su tema http://stackoverflow.com/questions/377164/whats-your-preferred-pointer-declaration-style-and-why – abatishchev