2011-02-05 14 views

Respuesta

31

respuesta a su pregunta

¿Qué pasará
Esto sucederá:

int x = 1; /* ASSUME THIS IS SO */ 
y = x = x + 1; 

/* Results: */ 
y == 2; 
x == 2; 

Cómo se compila
El mismo que:

x += 1; 
y = x; 

¿Por qué esto no está definido
Debido a que usted no está escribiendo x en la misma expresión que lo lea. Simplemente configúrelo a sí mismo + 1, luego asigne y al valor de x.

Su futuro
Si encuentra que el código confuso puede utilizar paréntesis para facilitar la lectura:

y = x = (x + 1); 
+2

Solo para su información, muntoo, ya que el "valor de retorno" de la asignación es su propio valor, también puede usarlo para otras cosas, como 'if (1 == x = 1)', que es bastante común error y la razón, los desarrolladores prefieren escribir '1 == x' en lugar de' x == 1' (porque no se puede asignar x a 1). – anroesti

+34

Los únicos desarrolladores que conozco que escriben cosas como '1 == x' son unos con los que no trabajaría ... –

+19

@andre: No, los" desarrolladores "no prefieren escribir eso. Es asqueroso, sucio e inútil; solo únete a la última década y activa las advertencias del compilador. – GManNickG

9

No. Sólo modificar x una vez, y debido a la asociatividad por la derecha del = que sucede asignación antes de la asignación a y. Incluso si sucedió después, todavía hay una sola modificación de x. Su estado de cuenta es tan legal como y = ++x.

17

No, su expresión está definida correctamente. Probablemente estaba buscando y = x = x++;, que no lo es.

+0

No 'y = x = x ++;' sería igual a 'y = x = x; x + = 1; '? ¿Por qué no se definiría eso correctamente? – rzetterberg

+0

O sería equivalente a 'y = x = x + 1; x + = 1; ', o a' y = x + 1 = x; x + = 1; '? –

+0

Estaba preguntando porque no estaba seguro y quería saber por qué 'x + 1' estaba bien, pero' x ++ 'no. – rzetterberg

Cuestiones relacionadas