4.4 这是个巧妙的表达式:  a ^= b ^= a ^= b  它不需要临时变量就可以交换 a 和 b 的值。

这不具有可移植性。它试图在序列点之间两次修改变量 a, 而这是无定义的。

例如,有人报告如下代码:

    int a = 123, b = 7654;
    a ^= b ^= a ^= b;
在 SCO 优化 C 编译器 (icc) 下会把 b 置为 123, 把 a 置为 0。

参见问题 3.13.7 和 20.14

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)