【发布时间】:2021-10-26 03:45:34
【问题描述】:
如果我有 2 个变量要设置为彼此相等,我会怎么做?例如,如果我有 2 个数字 (3 , 8) 所以 xval = 3 和 yval = 8 我将如何使用以下过程交换它们?
xval = yval;
yval = xval;
这只会将两个值都设置为 y,然后输出 (8 , 8)。我记得早些时候在我的女孩那里有一个存储值供以后使用的函数,但我忘记了它是什么
【问题讨论】:
-
声明第三个临时变量,或者更好地使用
std::swap。 -
如果您正在处理整数,还有一种更奇特的方法,您可以使用 XOR 运算,不需要第三个变量。例如,
a与b的交换值:a^= b; b^=a; a^=b。这背后的根本是x^x==0 -
@zois 现代架构上的 XOR 交换通常比涉及临时变量的交换慢,并且(如果要工作)还抑制了与指令流水线相关的一些优化(如果这些优化是没有被禁止,交换不能保证实际工作)。如果
a和b在内存中重叠(例如,一个是另一个的别名,直接或间接),它也不起作用。