2008-10-06 13 views
16

En C#, ¿alguien sabe por qué el siguiente compilará:pre y post operadores de incremento/decremento en C#

int i = 1; 
++i; 
i++; 

pero esto no se compilará?

int i = 1; 
++i++; 

(error Compiler: El operando de un operador de incremento o decremento debe ser una variable, propiedad o indizador.)

+2

Es una pregunta legítima, ¿por qué no lo defiende? – Will

Respuesta

19

está ejecutando uno de los operandos en el resultado de la otra, la el resultado de un incremento/decremento es un valor, y no se puede usar el incremento/decremento en un valor, tiene que ser una variable que se pueda establecer.

-3

Mi suposición: para evitar tales construcciones feas e innecesarios. También usaría 2 operaciones (2x INC) en lugar de una (1x ADD 2).

Sí, lo sé ... "pero quiero aumentar en dos y ¡soy un l33t g33k!"

Bueno, no seas un geek y escribir algo que no se ve como un error involuntario, como esto:

i += 2; 
+0

Eso es un poco duro, ¿no crees? Solo preguntaba por qué no compila: una pregunta sobre el diseño del compilador, no sobre el estilo del código. – fluffels

+0

Eso está siendo duro. Encontré que la pregunta es relevante y útil. –

3

Supongo que ++ i devuelve un tipo de valor entero, al que luego intenta aplicar el operador ++. Al ver que no puede escribir en un tipo de valor (piense en 0 ++ y si eso tuviera sentido), el compilador emitirá un error.

En otras palabras, esas declaraciones son interpretados como esta secuencia:

++i (i = 2, returns 2) 
2++ (nothing can happen here, because you can't write a value back into '2') 
9

Por la misma razón no se puede decir

5++; 

o

f(i)++; 

una función devuelve un valor, no es una variable. Los operadores de incremento también devuelven valores, pero no se pueden aplicar a los valores.

Cuestiones relacionadas