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

Сообщение Re[7]: Приоритет операторов в C++ от 27.01.2017 14:39

Изменено 27.01.2017 14:51 N. I.

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

R>Таким образом, при использовании постинкремента в правой части, мы знаем только, и присваивание и инкремент произойдут после value computation, но в каком порядке — неизвестно.


Примерно так, но тут следует уточнить, что порядок не неизвестен, его вообще не существует. Наличие неизвестного порядка и отсутствие какого-либо порядка — это две разные ситуации. Две unsequenced модификации одного скалярного объекта приводят к undefined behavior, а две indeterminately sequenced модификации одного скалярного объекта — нет. В данном случае у нас именно unsequenced modifications.
Re[7]: Приоритет операторов в C++
rg45:

R>Таким образом, при использовании постинкремента в правой части, мы знаем только, и присваивание и инкремент произойдут после value computation, но в каком порядке — неизвестно.


Примерно так, но тут следует уточнить, что порядок не неизвестен, его вообще не существует. Наличие неизвестного порядка и отсутствие какого-либо порядка — это две разные ситуации. Две unsequenced модификации одного скалярного объекта приводят к undefined behavior, а две indeterminately sequenced модификации одного скалярного объекта — нет. В данном случае у нас именно unsequenced modifications.

В C++17 строгий порядок в таком примере будет обеспечен за счёт нового правила для операторов присваивания:

The right operand is sequenced before the left operand.