Оператор запятой гарантирует порядок вычисления слева направо.
[n3290: 5.18 / 1]
: оператор запятой группирует слева направо.выражение: выражение-присваивания выражение, выражение-присваивание
Пара выражений, разделенных запятой, оценивается слева направо ; левое выражение является выражением отброшенного значения (раздел 5). Каждое вычисление значения и побочный эффект, связанный с левым выражением , упорядочивается перед каждым вычислением значения и побочным эффектом, связанным с правым выражением. Тип и значение результата - это тип и значение правого операнда; результат имеет ту же категорию значений , что и его правый операнд, и является битовым полем, если его правый операнд является значением glvalue и битовым полем.
Единственное другое предложение, касающееся оператора, не упоминает порядок оценки. Таким образом, похоже, что это все еще так, когда оператор был перегружен.
Но далее, в общих разговорах о выражениях, конечно, сказано, что правила меняются при перегрузке операторов:
{{1} }
[n3290: 5/2]:
[ Примечание: Операторы могут быть перегружены, то есть им присваивается значение при применении к выражениям типа класса ( Пункт 9) или перечислимый тип (7.2). Использование перегруженных операторов преобразуется в вызовы функций, как описано в 13.5. Перегруженные операторы подчиняются правилам синтаксиса, указанным в разделе 5, но требования к типу операнда , категории значения и порядку оценки заменяются правилами для функции вызов. Связи между операторами, например++ a
, означающиеa + = 1
, не гарантируются для перегруженных операторов (13.5) и не гарантируются для операндов типаbool
. - конец сообщения ]
Однако это ненормативный текст. Существует ли какой-либо нормативный текст, определяющий это правило, или может ли совместимый компилятор проигнорировать его?