Я могу понять, почему оператор присваивания является правоассоциативным. Имеет смысл, когда
x = 4 + 3
оценивается, что 4 и 3 добавляются перед присвоением x.
Мне неясно, как ?:
выиграет от правильной ассоциативности. Имеет ли значение только то, что два ?:
использовались вот так?
z = (a == b ? a : b ? c : d);
Затем он оценивается следующим образом:
z = (a == b ? a : (b ? c : d));
Конечно, было бы разумнее оценивать слева направо?
x = 4 + 3
единственным ограничением на порядок оценки является то, что операнды любого оператора должны быть оценены до применения самого оператора. Ни=
, ни+
не накладывают никакого порядка на оценку своих операндов. Дляx = 4 + 3
левый операндx
и правый операнд4 + 3
должны быть оценены до того, как произойдет присваивание, но это может произойти в любом порядке. Обратите внимание, что вычисление левого операндаx
относится к определению объекта, которому будет присвоено значение. В более сложном примере,arr[func1()] = func2();
, две функции можно вызывать в любом порядке. - person Keith Thompson   schedule 13.09.2011x = y = 4
потерпит неудачу. Во-первых, y будет присвоено значение x и возвращено значение r со значением y. Затем этому rvalue будет присвоено значение 4, что является недопустимым. - person Oscar Korz   schedule 14.09.2011