Ассоциативность говорит вам, что происходит, если у вас есть несколько экземпляров одного и того же оператора подряд.Например,
f() - g() - h()
анализируется как
(f() - g()) - h()
, а не
f() - (g() - h())
, поскольку -
является левой ассоциативной, а не правой ассоциативной.
Ничто из этого не имеет ничего общего с порядком вычисления, который определяет, какая функция вызывается первой.
Что касается ?:
, являющегося правой ассоциативной, это означает, что
a ? b : c ? d : e
анализируется как
a ? b : (c ? d : e)
(Это имеет немного больше смысла, если вы думаете о ?...:
как об одном операторе.)
Тем не менее, ?:
гарантирует оценку слева направо: первый операндвсегда вычисляется сначала, а затем точно один из других операндов (в зависимости от значения истинности первого результата).
В вашем примере
c=a>b? a=a*2: a=a+3
(пожалуйста, никогда не ставьте назначениявнутри ?:
, как в реальном коде) анализируется как
c = ((a>b) ? (a=a*2) : (a=a+3))
Это полностью из-за приоритета, а не ассоциативности (у нас здесь нет нескольких идентичных операторов рядом друг с другом).
a>b
оценивается первым (дает false
), что приводит к a=a+3
для оценки (получая 4
), которая затем присваивается c
.