C++同时为变量赋值

C++ simultaneous assignment of values to variables

本文关键字:变量 赋值 C++      更新时间:2023-10-16

我需要在执行以下类型任务的 c++ 程序中编写某个代码段。

b:=a+b;
a:=a-b;

其中 := 运算符表示首先计算所有表达式右侧的值,然后将每个表达式左侧的变量等同于右侧的计算值。

例如,在上面的代码中,如果 a=5 和 b=3,我需要 a 和 b 的最终值分别为 8 和 2,而不是如果我执行正常分配我会得到的 8 和 -3。

您可以使用

std::tie()std::make_tuple()

std::tie(a, b) = std::make_tuple(a-b, a+b);

tie 创建引用元组,元组赋值等效于元素赋值。因此,这实际上与以下相同:

// create the right-hand-side-tuple
auto __tmp1 = a-b;
auto __tmp2 = a+b;
// assign to the left-hand-side references
a = __tmp1;
b = __tmp2;

但是由于这里的赋值在概念上是"原子的",你可以把它写在一行中——因为所有的操作(a-ba+b)都是在赋值本身之前排序的。

您可以使用名称为 beforeafter 的结构来保存变量。然后,无论您有多少变量,都可以按如下方式使用代码:

after.a = before.a + before.b;
after.b = before.a - before.b;

然后,一旦计算完成,您可以通过以下语句移动所有新值:

before = after;