Почему C / C ++ не определяет порядок вычисления выражений? - PullRequest
1 голос
/ 01 августа 2009

Как вы знаете, в C / C ++ не указан порядок вычисления выражений. Каковы причины, чтобы оставить их неопределенными.

Ответы [ 2 ]

4 голосов
/ 01 августа 2009

Это позволяет оптимизировать компилятор. Одним из примеров может быть переупорядочение арифметических инструкций для максимального использования ALU или сокрытие задержки памяти при вычислениях.

1 голос
/ 25 декабря 2017

Одной из целей разработки C / C ++ является эффективная реализация для компиляторов. Таким образом, компиляторам предоставляется относительно свободная возможность выбора порядка вычисления различных подвыражений в сложном выражении; этот порядок не ограничен приоритетами операторов и ассоциативностью, как мы думаем. В такой ситуации, когда мы модифицируем один и тот же vairiable в нескольких подвыражениях, поведение становится неопределенным. Операция увеличения или уменьшения не гарантируется, что она будет выполнена сразу же после отказа от предыдущего значения и до того, как любая другая часть выражения будет оценена. Единственная гарантия состоит в том, что обновление будет выполнено до того, как выражение будет считаться завершенным.

Неопределенное поведение означает неопределенное, и может произойти все, что угодно .

Источник: FAQ по программированию на С, автор Steve Summit

...