Здравствуйте, folk, Вы писали:
F>Здравствуйте, romam, Вы писали:
АШ>>>У Вас неверно передана семантика постфиксного инкремента. Вот с этой версией Ваши тесты пошли?
АШ>>>АШ>>>aa operator ++(const int ab)
АШ>>>{
АШ>>> aa temp(*this);
АШ>>> ii++;
АШ>>> return temp;
АШ>>>}
АШ>>>
R>>С этой версией выражение
R>>x=x++;
R>>для инта приводит к увеличению х на еденицу, а для перегруженного ++ — нет. Имхо это можно объяснить только тем, что у интового ++ низкий приоритет, выполняется сначала
R>>х=х;
R>> потом —
R>>x++;
R>>А у перегруженного ++ — высокий.
F>Неправильно. Выражение x=x++ для int приводит не к увеличению x на 1, а к неопределенному поведению, поскольку в этом случае происходит одновременная модификация скалярного объекта более одного раза.
R>>Проверялось на компиляторе под Linux (g++) и в MSVS 6.0
F>Ну и что? На других компиляторах или с другими ключами компиляции ты можешь получить иные результаты.
1.Правильно ли я понял что неопределенное поведение возникает только при модификации переменной в выражении больше одного раза?
2.Означает ли это что если я не модифицирую переменную в выражении больше 1 раза то я могу быть уверен что выражение будет работать одинаково на всех компиляторах?
3. Означает ли это что приоритеты всегда и везде остаются постоянными(например при перегрузке операций) для всех операций и случай неопределенного поведения никак не связан с приоритетом а поведение зависит только лишь от конкретной реализации компилятора?