Нет, ассоциативность - это как расставлять скобки
Да, верно.
Что-то смотрю в документации и не вижу спецификации например для "a+b", в каком порядке "a" и "b" оцениваются. Что важно при изобилии side effects.
Ключевым моментом тут является не то, что порядок
не оговаривается, а то, что никакого порядка вообще
не сущестывует. Неоговоренный порядок (indeterminately sequenced evaluation) и отсутствие порядка (unsequenced evaluation) - это соврешенно разные вещи.
В выражении `a+b` подвыражения `a` и `b` являются unsequenced и в С, и в С++, то есть неупорядочены вообще никак. Они могут фактически вычисляться параллельно, перемешанно и одновременно. По этой причине ни о каком `++i + ++i` в С и С++ не может быть и речи, ни со скобками, ни без скобок, ни вообще никак.
Интересно, почему молчит автор темы? Наверняка он, затевая беседу, имел какие-то мысли по этому поводу.
Возможно потому что именно этот вопрос в С и С++ форумах - популярный торололо вброс чуть ли не с Лурка. Скорее всего именно с этим мы и имеем дело в данном случае.
-- 01.04.2022, 18:42 --Ну да, тут не отличается от любого вызова функции "func(a, b);", где порядок оценки аргументов может быть произвольный.
Тут только функция "operator+(a,b);".
Такая аналогия справедлива только в С, где вычисление аргументов функции тоже точно так же unsequenced, то есть может выполняться паралелльно/одновременно/перемешанно для всех аргументов.
Для С++ такая аналогия грубейше не верна. Порядок вычисления аргументов функции в С++ является indeterminately sequenced, то есть все аргументы должны вычисляться изолированно в каком-то произвольном порядке.
Например
int foo(int a, int b)
{
return a + b;
}
int i = 1;
int r = foo(++i, ++i);
В языке С++ поведение определено и функция гарантированно возвращает 5. (Низкокачественные компиляторы, вроде GCC, пока не добрались до этой гарантии С++17)
В языке С поведение не определено, никто ничего не вычисляет и никуда не возвращает, код в общем случае - некомпилируем.