C ++同时将值赋值给变量

时间:2016-02-19 16:42:07

标签: c++

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

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

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

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

2 个答案:

答案 0 :(得分:8)

您可以使用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)在赋值之前都被排序。

答案 1 :(得分:0)

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

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

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

before = after;