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

Сообщение Re[2]: Приоритет операторов в C++ от 24.01.2017 7:55

Изменено 24.01.2017 7:57 rg45

Re[2]: Приоритет операторов в C++
Здравствуйте, RussianFellow, Вы писали:

RF>Ну, например, что означают выражения:


RF>
RF>++*p1 = ++*p2;
RF>


Разыменование двух указателей с последующим инкрементом и присваиванием.

Если только все используетые операторы не являются перегруженными, то, согласно пункту 1.9/15 стандарта С++11, такое выражение порождает неопределенное поведение, поскольку скалярный объект, адресуемый указателем p1, модифицируется дважды посредством неупорядоченных побочных эффектов:

If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.


В C++03 это поведение регулировалось таким понятием как "точки следования". Начиная с C++11 точки следования были заменены уточненными понятиями, но принцип сохранился.
Re[2]: Приоритет операторов в C++
Здравствуйте, RussianFellow, Вы писали:

RF>Ну, например, что означают выражения:


RF>
RF>++*p1 = ++*p2;
RF>


Разыменование двух указателей с последующим инкрементом адресуемых объектов и присваиванием.

Если только все используетые операторы не являются перегруженными, то, согласно пункту 1.9/15 стандарта С++11, такое выражение порождает неопределенное поведение, поскольку скалярный объект, адресуемый указателем p1, модифицируется дважды посредством неупорядоченных побочных эффектов:

If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.


В C++03 это поведение регулировалось таким понятием как "точки следования". Начиная с C++11 точки следования были заменены уточненными понятиями, но принцип сохранился.