我可以使用元组和领带交换两个变量吗?
int x, y;
....
std::tie(y, x) = std::make_tuple(x, y);
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
对于无符号类型,这是明确定义的.对于签名类型if,它是正式的Undefined Behavior这两个值中的任何一个都是负数 任何中间值都不能在类型中表示.