Czy w wyrażeniu a ^ = b ^ = a ^ = b są punkty sekwencji, czy jest to niezdefiniowane?

Rzekomo „sprytny” (ale w rzeczywistości nieefektywny) sposób zamiany dwóch zmiennych całkowitych zamiast tymczasowego przechowywania często obejmuje tę linię:

int a = 10;
int b = 42;

a ^= b ^= a ^= b; /*Here*/

printf("a=%d, b=%d\n", a, b); 

Ale zastanawiam się, czy operatorzy przypisania złożonego lubią^= nie są punktami sekwencji, prawda? Czy to oznacza, że ​​faktycznie jest to niezdefiniowane zachowanie?

questionAnswers(4)

yourAnswerToTheQuestion