Оценка выражений в C ++ с участием унарных операторов

Почему C / C ++ не оценивает выражение в порядке слева направо в этих случаях: Изначально x = 1

Evaluating x + ++x gives 4. 

Если выполняется обычная оценка (приоритет ++ выше +), тогда результат должен быть 1 + 2 = 3

Так же:

 x + ++x + x gives 6 x + x + ++x gives 4 

Почему результаты разные?

Больше случаев:

  x + x++ +x gives 5 

Какое правило следует за C / C ++?

В частности, результаты этих выражений не определены, это связано с требованием Cs для множественного доступа (за исключением случаев, когда все обращения читаются) всегда имеет точку последовательности между ними (например, или;). Полученные вами результаты эффективно случайны и будут зависеть от вашего компилятора или теоретически могут даже измениться между прогонами вашей программы, см. Здесь информацию о точках последовательности:

http://en.wikipedia.org/wiki/Sequence_point

И здесь, если вы хотите узнать о неопределенном поведении (что вызывает неправильное использование переменной):

http://en.wikipedia.org/wiki/Undefined_behavior#Examples_in_C_and_C.2B.2B