Сообщение Re[6]: Приоритет операторов в C++ от 27.01.2017 13:33
Изменено 27.01.2017 14:11 rg45
Re[6]: Приоритет операторов в C++
Здравствуйте, N. I., Вы писали:
R>>
NI>До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения...
Что-то я как-то медленно соображать стал. Выходит, что в случае использования постинкремента, в отличие от преинкремента, применение побочного эфффекта не является необходимым для вычисления правой части оператора присваивания, таким образом инкремент и присваивание оказываются неупорядоченными друг с другом. Правильно?
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
NI>До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения...
Что-то я как-то медленно соображать стал. Выходит, что в случае использования постинкремента, в отличие от преинкремента, применение побочного эфффекта не является необходимым для вычисления правой части оператора присваивания, таким образом инкремент и присваивание оказываются неупорядоченными друг с другом. Правильно?
Re[6]: Приоритет операторов в C++
Здравствуйте, N. I., Вы писали:
R>>
NI>До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения...
Что-то я как-то медленно соображать стал. Выходит, что в случае использования постинкремента, в отличие от преинкремента, применение побочного эфффекта не является необходимым для вычисления правой части оператора присваивания, таким образом инкремент и присваивание оказываются неупорядоченными друг с другом. Правильно?
В этом контексте нелишним будет упомянуть правила для постфиксных инкремента/декремента:
Таким образом, при использовании постинкремента в правой части, мы знаем только, и присваивание и инкремент произойдут после value computation, но в каком порядке — неизвестно.
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
NI>До C++17 эти две модификации не были упорядочены между собой, т.к. здесь инкремент — постфиксный, а у него модификация следует за вычислением значения...
Что-то я как-то медленно соображать стал. Выходит, что в случае использования постинкремента, в отличие от преинкремента, применение побочного эфффекта не является необходимым для вычисления правой части оператора присваивания, таким образом инкремент и присваивание оказываются неупорядоченными друг с другом. Правильно?
В этом контексте нелишним будет упомянуть правила для постфиксных инкремента/декремента:
The value computation of the ++ expression is sequenced before the modification of the operand object.
Таким образом, при использовании постинкремента в правой части, мы знаем только, и присваивание и инкремент произойдут после value computation, но в каком порядке — неизвестно.