По большей части каждый оператор имеет ассоциативность, которая наиболее подходит для этого оператора.
Все бинарные операторы без присваивания имеют ассоциативность слева направо.Это полезно по очевидной причине, что английский читается слева направо, и поэтому оценка x + y + z
согласуется с тем, как он читается.Кроме того, для арифметических операторов семантика соответствует тому, что мы ожидаем от использования операторов в математике.
Операторы присваивания имеют ассоциативность справа налево.Слева направо назначение будет иметь странную и неожиданную семантику.Например, x = y = z
приведет к тому, что x
будет иметь исходное значение y
, а y
будет иметь исходное значение z
.Ожидается, что все три переменные будут иметь одно и то же значение после завершения выражения.
Префиксные унарные операторы имеют ассоциативность справа налево, что имеет смысл, поскольку операторы, наиболее близкие к операнду, вычисляются первыми,поэтому в ~!x
сначала вычисляется !x
, затем к результату применяется ~
.Было бы действительно, действительно странно, если бы префиксные операторы применялись с ассоциативностью слева направо: сказать, что ~!x
означает оценку ~x
, а затем применить !
к результату, является полной противоположностьюкак мы думаем о выражениях (или, по крайней мере, как большинство людей думают о выражениях ...).