Pourquoi l’opérateur conditionnel est-il associatif?

Je peux comprendre pourquoi l’opérateur d’affectation est juste associatif. Il est logique que lorsque

x = 4 + 3 

est évalué, que 4 et 3 sont ajoutés avant d’être affectés à x.

Je ne sais pas comment? gagnerait à être juste associatif. Est-ce seulement important quand deux? s ont été utilisés comme ça

 z = (a == b ? a : b ? c : d); 

Ensuite, il est évalué comme ceci:

 z = (a == b ? a : (b ? c : d)); 

Il serait sûrement plus logique d’évaluer de gauche à droite?

Si elle était évaluée de gauche à droite, cela ressemblerait à ceci:

 z = ((a == b ? a : b) ? c : d); 

Autrement dit, le résultat du premier conditionnel ( a ou b ) serait utilisé comme condition booléenne du deuxième conditionnel. Cela n’a pas beaucoup de sens: c’est comme si on disait:

 int z, tmp; /* first conditional */ if(a == b) tmp = a; else tmp = b; /* second conditional */ if(tmp) z = c; else z = d; 

Même si un jour vous voudrez peut-être faire exactement cela, il est beaucoup plus probable que chacun ?: Ceci est censé append plus de conditions, comme if / else if / else if / else , ce que donne la liaison associative droite :

 int z; /* first conditional */ if(a == b) z = a; else /* second conditional */ if(b) z = c; else z = d; 

Dans n’importe quelle langue avec un opérateur ternaire associatif de droite, vous pouvez les emstackr et créer une expression if-elseif-elseif-else, comme ceci:

 val = a == 0 ? 1: a == 1 ? 2: 4; 

Au contraire, dans les langues avec un opérateur ternaire associatif gauche (tel que PHP, merci @ utilisateur786653), vous devez appliquer explicitement l’intention susmentionnée avec des parenthèses:

  

Vous avez mal compris le concept d’associativité.

Lorsque l’opérateur + est dit associé à gauche, cela signifie que a + b + c équivaut à (a + b) + c , par opposition à a + (b + c) .

L’opérateur = est associatif à droite, ce qui signifie que a = b = c est équivalent à a = (b = c) , par opposition à (a = b) = c .

L’associativité n’a rien à voir avec l’ordre d’évaluation.