Страницы

Поиск по вопросам

вторник, 7 мая 2019 г.

Swap переменных xor'ом в одно выражение

Является ли такой способ обмена значений переменных неопределённым поведением?
http://codepad.org/3IFTpgwR
#include
int main(void) { int x = 10, y = 20; x ^= y ^= x ^= y; printf("%d %d", x, y); return 0; }
Здесь есть двукратное присваивание переменной x - является ли оно некорректным?
PS: Вопрос возник из-за того, что другие языки иначе вычисляют эту конструкцию.


Ответ

Да, является. Операция xor-c-присваиванием (^=) не является точкой следования
Многократное присваивание в рамках одной точки следования - UB.
Для обмена переменных в c++ есть std::swap()

Комментариев нет:

Отправить комментарий