Здравствуйте VVV, Вы писали:
АТ>>>Старый избитый прикол
АТ>>>АТ>>>a ^= b ^= a ^= b;
АТ>>>
АТ>>>Разумеется, работать это будет только для некоторых типов.
АТ>>Хотя, если посмотреть на это внимательнее, то становится ясно, что за такое морду бить надо. Две модификации каждой переменно в рамках одного выражения — неопределенное поведение.
АТ>>Правильнее так
АТ>>АТ>>b ^= a; a ^= b; b ^= a;
АТ>>
VVV>Разве и в операторе присваивания будет неопределённое поведение??? Разве не говорится, что сначала вычисляется правая часть и затем присваивается левой? Пожалуйста, дайте выдержку из стандарта где такое использование оператора присваивания считается неопределённым.
Любое выражениие, в котором одна и таже переменная встроенного типа модифицируется более одного раза между парой соседних точек следования, порождает неопределенное поведение. См. пункт 5/4 стандарта языка C++. А какой там оператор значения не имеет. Мой первый вариант страдал именно это проблемой.