浮点值的C++ XOR交换

m.z*_*unt 2 c++ floating-point swap xor

是否可以在C++中使用具有浮点值的XOR交换算法?

然而,维基百科说:

XOR按位运算以交换具有相同数据类型的不同变量的值

但我有点困惑.使用此代码:

void xorSwap (int* x, int* y) {
   *x ^= *y;
   *y ^= *x;
   *x ^= *y;
}

int main() {

   float a = 255.33333f;
   float b = 0.123023f;
   xorSwap(reinterpret_cast<int*>(&a), reinterpret_cast<int*>(&b));
   std::cout << a << ", " << b << "\n";

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作(至少在gcc下),但我担心如果需要这样的做法?

roa*_*alz 6

从技术上讲,你问的可能的,但正如IInspectable明确评论的那样,它会导致UB(未定义的行为).
无论如何,我建议你使用std :: swap,它是一个专门用于特定数据类型的模板,旨在做好工作.

  • §3.10p10 [basic.lval]:*"如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:[...]"* - 所以,是的,可能的,合理的,干净的.而且错了.这是未定义的. (2认同)