Question

La plupart des langages de programmation ont une table de priorité et associativité des opérateurs pour les opérateurs binaires.L'associativité des questions, dans certains cas, par exemple, (a - b) - c != a - (b - c).

Cependant, pour un opérateur associatif comme && il semble pas à la matière, mais la plupart des langues de la liste de ce que associativité à gauche.

Existe-il des situations où il y a effectivement une différence entre (a && b) && c et a && (b && c)?

Était-ce utile?

La solution

Je ne peux pas croire il y a donc beaucoup de mal (supprimé) les réponses...je devrais peut-être répondre à cette question.

Tout d'abord, la priorité != l'associativité != ordre d'évaluation.

Maintenant que nous avons que de la route:l'associativité des questions dans certains cas.
Pour a + b + c, il est important lorsque vous a, b, et c sont des nombres à virgule flottante au lieu de nombres entiers, parce que les erreurs d'arrondi va s'accumuler en fonction de la façon dont les termes sont regroupés.

Pour le cas particulier de && et ||, il n'a pas d'importance tant qu'ils ne sont pas surchargés (ce qui est possible en C++, pas du C), mais le langage définit toujours un peu pour la cohérence -- et donc que "l'arbre" de la représentation du code (basé sur la grammaire) est unique.Qui travaille également à l'avantage du C++ depuis maintenant le sens de l'surchargé && et || n'est pas ambigu.

Autres conseils

L'ajout de @Mehrdads réponse@ (dont je upvoted):

Si jamais vous avez construit un analyseur, vous remarquerez que vos opérateurs doivent avoir une associativité, sinon

a && b && c

serait tout simplement une erreur de syntaxe.En supposant que le ci-dessus ne doit pas être une erreur de syntaxe, vous devez décider si elle doit dire:

(a && b) && c

ou

a && (b && c)

Vous ne pouvez pas simplement dire:Je n'ai pas de soins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top