Re[4]: приоритеты перегрженных операций
От: Аноним  
Дата: 07.07.04 04:40
Оценка:
Здравствуйте, 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. Означает ли это что приоритеты всегда и везде остаются постоянными(например при перегрузке операций) для всех операций и случай неопределенного поведения никак не связан с приоритетом а поведение зависит только лишь от конкретной реализации компилятора?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.