Re[4]: поменять местами A и B
От: Андрей Тарасевич Беларусь  
Дата: 08.06.02 04:52
Оценка:
Здравствуйте VVV, Вы писали:

АТ>>>Старый избитый прикол


АТ>>>
АТ>>>a ^= b ^= a ^= b;
АТ>>>


АТ>>>Разумеется, работать это будет только для некоторых типов.


АТ>>Хотя, если посмотреть на это внимательнее, то становится ясно, что за такое морду бить надо. Две модификации каждой переменно в рамках одного выражения — неопределенное поведение.


АТ>>Правильнее так


АТ>>
АТ>>b ^= a; a ^= b; b ^= a;
АТ>>


VVV>Разве и в операторе присваивания будет неопределённое поведение??? Разве не говорится, что сначала вычисляется правая часть и затем присваивается левой? Пожалуйста, дайте выдержку из стандарта где такое использование оператора присваивания считается неопределённым.


Любое выражениие, в котором одна и таже переменная встроенного типа модифицируется более одного раза между парой соседних точек следования, порождает неопределенное поведение. См. пункт 5/4 стандарта языка C++. А какой там оператор значения не имеет. Мой первый вариант страдал именно это проблемой.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.