2010-09-07 21 views
1

J'ai récemment lu: "Les expressions (++ i) et (i ++) ont des valeurs et des effets secondaires L'effet secondaire est que la valeur de i est augmentée de 1. La valeur de (i ++) est la valeur avant l'incrément et la valeur de (++ i) est la valeur après l'incrément, mais si l'incrément ou l'évaluation a lieu en premier, ne fait pas partie de C. "L'implémentation de ++ i vs. i ++ varie-t-elle d'une langue à l'autre?

Je sais que l'étape d'évaluation se déroule d'abord en Java ... est-ce la même chose pour toutes les autres langues?

Répondre

2

au moins en C++, les opérateurs peuvent être surchargés, de sorte que la sémantique de ++i et i++ ne sont pas garantis - ils peuvent en fait être surchargée pour faire des choses très différentes, et peut même être fait pour faire quelque chose qui n'a rien à voir avec incrément. Donc, la réponse à votre question est que non - dans au moins une langue, l'opérateur de préfixe et préfixe ++ pour les classes peut faire ce que le programmeur souhaite.

Mais juste parce que quelqu'un peut le faire, cela ne signifie pas qu'ils le devraient. Comme les opérateurs pré et post-incrément ont une sémantique très connue, les programmeurs C++ (décents) essaient de ne pas la violer, de peur que le code qui les utilise ne soit le plus surpris.

Les itérateurs STL sont un bon exemple de surcharge d'opérateur en C++. Les itérateurs vers des conteneurs comme des listes chaînées définissent une classe qui surcharge les opérateurs preincrement et postincrement de telle sorte qu'elle mime un pointeur (les itérateurs en C++ sont en fait une généralisation des pointeurs).

+0

Cool. Merci pour la réponse réfléchie! Mis à part la surcharge, je me demandais s'il y avait des implémentations différentes (par calcul). – sova

+0

@sova: Probablement pas. L'opérateur '++' est rendu célèbre par les langages en C comme C, C++, Java, C#, etc. pour signifier «incrémenter cette variable», avec des effets secondaires bien connus. –