2008-10-06 7 views
16

En C#, quelqu'un sait pourquoi ce qui suit compilera:pré et post opérateurs d'incrémentation/décrémentation en C#

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

mais cela ne compilera pas?

int i = 1; 
++i++; 

(erreur du compilateur: L'opérande d'un opérateur d'incrément ou décrément doit être une variable, la propriété ou indexeur.)

+2

C'est une question légitime, pourquoi lui pour ça? – Will

Répondre

19

vous utilisez l'un des opérandes sur le résultat de l'autre, la le résultat d'un incrément/décrément est une valeur - et vous ne pouvez pas utiliser incrément/décrément sur une valeur, il doit s'agir d'une variable qui peut être définie.

-3

Je pense: pour éviter de telles constructions laides et inutiles. En outre, il utiliserait 2 opérations (2x INC) au lieu d'une (1x ADD 2).

Oui, je sais ... "mais je veux augmenter de deux et je suis un l33t g33k!"

Eh bien, ne soyez pas un geek et d'écrire quelque chose qui ne ressemble pas à une erreur par inadvertance, comme ceci:

i += 2; 
+0

C'est un peu dur ne pensez-vous pas? Il demandait seulement pourquoi il ne compilait pas - une question sur la conception du compilateur, pas sur le style de code. – fluffels

+0

C'est dur. J'ai trouvé la question pertinente et utile. –

3

Ma conjecture serait que ++ je renvoie un type valeur entière, auquel vous essayez ensuite d'appliquer l'opérateur ++. Vu que vous ne pouvez pas écrire dans un type de valeur (pensez à 0 ++ et que cela aurait du sens), le compilateur émettra une erreur.

En d'autres termes, ces déclarations sont analysés comme cette séquence:

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

Pour la même raison, vous ne pouvez pas dire

5++; 

ou

f(i)++; 

A fonction retourne valeur, pas une variable. Les opérateurs d'incrémentation renvoient également des valeurs, mais ne peuvent pas être appliqués aux valeurs.

Questions connexes