据称"巧妙"(但实际上效率低下)交换两个整数变量而不是使用临时存储的方式通常涉及这一行:
int a = 10; int b = 42; a ^= b ^= a ^= b; /*Here*/ printf("a=%d, b=%d\n", a, b);
但我想知道,复合赋值运算符^=不是序列点,是吗?这是否意味着它实际上是未定义的行为?
^=
c undefined-behavior sequence-points compound-assignment
c ×1
compound-assignment ×1
sequence-points ×1
undefined-behavior ×1