我能用tuple和tie交换两个变量吗?
int x, y;
....
std::tie(y, x) = std::make_tuple(x, y);
答案 0 :(得分:5)
std::make_tuple
创建一个元组实例,一个参数的副本,因此使用它来分配回原始变量没有问题。
然而,与仅使用std::swap
相比,它不是惯用且更迂回,即它不是人们所期望的代码,所以我不会这样做。
关于效率,仅仅因为总是出现这样的问题,这完全取决于编译器:所有可以说的是,如果重要的话,那就是衡量。
std::make_tuple
交换使用临时的,即元组。
要在不使用临时变量的情况下挖掘基本积分类型的两个变量的值,您可以使用旧的XOR技巧:
x ^= y;
y ^= x; // Sets y = original x value by cancelling the original y bits.
x ^= y; // Sets x = original y value by cancelling the original x bits.
对于无符号类型,这是明确定义的。如果这两个值中的任何一个是负的,那么它的正式未定义行为是签名类型。任何中间值都不能在类型中表示。