2014-02-19 8 views
-1

Почему не C/C++ вычисляет выражение в порядке слева направо, в следующих случаях: Первоначально х = 1оценка Экспрессия в C++ с участием унарные операторы

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++ вместо?

+0

см http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – twin

ответ

0

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

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

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

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