Является ли такой способ обмена значений переменных неопределённым поведением?
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()
Комментариев нет:
Отправить комментарий