UB. Но все примеры используют что-то стрёмное типа i++ + ++i
Приведёт ли такая запись к UB?
int key = 0;
while (key < 9) {
buffer[i] = foo(some.value(key++), some.value(key++));
}
Да, порядок вычисления аргументов вызова неспецифицирован
Если только они не упорядочены относительно друг друга!
Тут есть UB за счёт неупорядоченности побочных эффектов от двух key++. Порядок вычисления аргументов фукнции не определён
Не несколько инкрементов, а несколько любых подвыражений с побочными эффектами, входящие в одно полное выражение, и не упорядоченные относительно друг друга (если есть хотя бы одна не упорядоченная пара) -- это UB.
Обсуждают сегодня