回复 17# 的帖子
这样的交换是未定义的。我也不多说了,和运算顺序无关,看下面的资料。
3.4 这是个巧妙的表达式: a ?= b ?= a ?= b 它不需要临时变量就可
以交换a 和b 的值。
这不具有可移植性。它试图在序列点之间两次修改变量a, 而这是无定义的。
例如,有人报告如下代码:
int a = 123, b = 7654;
a ^= b ^= a ^= b;
在SCO 优化C 编译器(icc) 下会把b 置为123, 把a 置为0。
[ 本帖最后由 StarWing83 于 2008-5-20 14:58 编辑 ]