Сообщение 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>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)
Эти две модификации не упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).
R>[Upd]
R>Да, но как в таком случае понимать пример из 1.9/15?
R>
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>
R>void f(int, int); R>void g(int i, int* v) { R>i = v[i++]; // the behavior is undefined
R>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)
Эти две модификации не упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).
Re[5]: Приоритет операторов в C++
rg45:
R>[Upd]
R>Да, но как в таком случае понимать пример из 1.9/15?
R>
R>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)
До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).
R>[Upd]
R>Да, но как в таком случае понимать пример из 1.9/15?
R>
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>
R>void f(int, int); R>void g(int i, int* v) { R>i = v[i++]; // the behavior is undefined
R>В обоих выделенных случаях, согласно 5.17/1, присваивание выполняется после модификации (инкремента)
До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения (у префиксного же вычисление значения следует за модификацией, что в рассмотренном ранее примере позволяет выстроить упорядоченную цепочку модификация -> вычисление значения -> модификация).