Я знаю, что этот вопрос часто задают в его версии «i = i++ +1», в которой i появляется дважды, но мой вопрос отличается тем, что он касается ТОЛЬКО правой части этого выражения, определенность которого неочевидна. мне. Я имею в виду только:
i++ + 1;
cppreference.com указывает здесь, что:
2) Вычисления значений (но не побочных эффектов) операндов любого оператора выполняются до вычисления значений результата оператора (но не его побочных эффектов).
Я понимаю, что это означает, что вычисление значения упорядочено, но никаких заявлений о побочном эффекте не делается.
[...]
4) Вычисление значения встроенных операторов постинкремента и постдекремента упорядочено до его побочного эффекта.
Однако он не указывает, что побочный эффект (в данном случае) левого операнда упорядочен по отношению к вычислению значения выражения.
Далее в нем говорится:
Если побочный эффект на скалярном объекте не является последовательным по отношению к вычислению значения с использованием значения того же скалярного объекта, поведение не определено.
Разве здесь не так? Побочный эффект оператора post-inc на i не является последовательным по сравнению с вычислением значения оператора сложения, который использует тот же i.
Почему это выражение обычно не называют неопределенным?
Это потому, что считается, что оператор сложения влечет за собой вызов функции, для которой даются более строгие гарантии последовательности?