Информация об изменениях

Сообщение Re[5]: Приоритет операторов в C++ от 27.01.2017 9:30

Изменено 27.01.2017 12:08 N. I.

Re[5]: Приоритет операторов в C++
rg45:

R>[Upd]

R>Да, но как в таком случае понимать пример из 1.9/15?

R>

R>

R>void f(int, int);
R>void g(int i, int* v) {
R>i = v[i++]; // the behavior is undefined
R>i = 7, i++, i++; // i becomes 9
R>i = i++ + 1; // the behavior is undefined
R>i = i + 1; // the value of i is incremented
R>f(i = -1, i = -1); // the behavior is undefined
R>}
R>

R>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)

Эти две модификации не упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).
Re[5]: Приоритет операторов в C++
rg45:

R>[Upd]

R>Да, но как в таком случае понимать пример из 1.9/15?

R>

R>

R>void f(int, int);
R>void g(int i, int* v) {
R>i = v[i++]; // the behavior is undefined
R>i = 7, i++, i++; // i becomes 9
R>i = i++ + 1; // the behavior is undefined
R>i = i + 1; // the value of i is incremented
R>f(i = -1, i = -1); // the behavior is undefined
R>}
R>

R>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)

До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).