2011-05-26 5 views
0

Можно создать дубликат:
Undefined Behavior and Sequence PointsЭтот пример вызывает неопределенное поведение?

Переменная i изменяется в два раза, но следующий пример будет вызывать неопределенное поведение?

#include <iostream> 
int main() 
{ 
    int i = 5; 
    std::cout << "before i=" << i << std::endl; 
    ++ i %= 4; 
    std::cout << "after i=" << i << std::endl; 
} 

Выход я получаю:

before i=5 
after i=2 
+1

Что вы ожидали? – RedX

+0

@RedX: Schweppes? – ereOn

ответ

7

Да, это не определено. Нет точки последовательности при присваивании,% или ++. Вы не можете изменять переменную более одного раза в точке последовательности.

Компилятор может оценить это как:

++i; 
i = i % 4; 

или

i = i % 4; 
++i; 

(или что-то еще)