Предполагаемый "умный" (но фактически неэффективный) способ обмена двумя целыми переменными вместо использования временного хранилища часто включает в себя эту строку:
int a = 10;
int b = 42;
a ^= b ^= a ^= b; /*Here*/
printf("a=%d, b=%d\n", a, b);
Но мне интересно, сложные операторы присваивания, такие как ^=
, не являются точками последовательности, не так ли?
Означает ли это на самом деле поведение undefined?