Q如何编写一个通用的宏来交换两个值?
A这个问题没有好的答案。如果值是整数,可以使用一个熟知的技巧,利用异或(exclusive-OR),但这不适用于浮点值或指针,或者当两个值是同一个变量时。(参见问题 3.3b 和 20.15c。)如果宏的目的是用于任意类型的值(通常的目标),任何涉及临时变量的解决方案都有问题,因为:
的运算数。最好的通用解决方案可能是放弃使用宏,除非你愿意将类型作为第三个参数传递。(另外,如果你试图交换整个结构或数组,你可能想交换指针。)如果你担心使用丑陋的临时变量,并且知道你的机器提供高效的交换指令,说服你的编译器供应商在优化阶段识别标准的三个赋值交换的惯用法。
如果你被一种强烈的愿望驱使去解决这个问题,请三思而后行;有更好的、更值得你付出的问题。
其他链接: 所以你认为你有一个解决方案