Страницы

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

понедельник, 24 февраля 2020 г.

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

#cpp #c #неопределенное_поведение


Является ли такой способ обмена значений переменных неопределённым поведением?

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: Вопрос возник из-за того, что другие языки иначе вычисляют эту конструкцию.
    


Ответы

Ответ 1



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

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

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