这是一种未定义的行为吗?我可以在没有温度的情况下交换值吗?

Is it an undefined behavior? Could I exchange values without a temp?

本文关键字:我可以 有温度 交换 情况下 未定义 一种      更新时间:2023-10-16

我可以使用元组和领带交换两个变量吗?

int x, y;
....
std::tie(y, x) = std::make_tuple(x, y);

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.

这是为无符号类型明确定义的。如果

两个值中的任何一个为负数,则符号类型的形式上为未定义行为,任何中间值在类型中都不可表示。