Quand la opérateur de l'associativité de la matière?
-
21-12-2019 - |
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)
?
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.