Ich konnte immer noch nicht klar verstehen, ob der Ausdruck x ^= y ^= x ^= y;
gültig in C++ 11 (wie sie in diesem thread sagen) oder es zu undefiniertem Verhalten führt?Tausche Integer über XOR in einer Zeile. Ist es in C++ 11 wirklich erlaubt?
Die durch den Link angeführten Gründe scheinen überzeugend, aber Klappern wirft eine warning:
Warnung: unsequenced Modifikation und den Zugriff auf 'x' [-Wunsequenced]
Außerdem, wenn beide Versionen :
x ^= y ^= x ^= y; // (1)
x = x^(y = y^(x = (x^y))); // (2)
als gleichwertig betrachtet (und gut definiert in C++ 11), warum gibt es unterschiedliche Ergebnisse (first, second)?
Darüber hinaus sollte beachtet werden, dass der gcc gibt warning über Sequenzpunkt nur auf der zweiten Version des Codes.
Nein, es ist nicht gut definiert. Die Analyse ist sehr ähnlich zu der von 'i + = ++ i + 1' in [dieser Frage] (http://stackoverflow.com/questions/24194076/in-c11-does-ii-1-exhibit-undefined- Verhalten). –
diese Versionen sind überhaupt nicht äquivalent. – UmNyobe
Siehe http://stackoverflow.com/questions/29313902/sequence-point-within-assignment-operators – Lingxi