Вычисление выражения в 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++?


person Rajs123    schedule 19.02.2014    source источник
comment
см. stackoverflow.com/questions/4176328/   -  person twin    schedule 19.02.2014


Ответы (1)


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

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

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

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

person Vality    schedule 19.02.2014