我需要在执行以下类型任务的c ++程序中编写某个代码段。
b:=a+b;
a:=a-b;
其中:=运算符表示首先计算所有表达式右侧的值,然后每个表达式左侧的变量等于右侧的计算值。
例如,在上面的代码中,如果a = 5且b = 3,我将需要a和b的最终值分别为8和2而不是8和-3如果我执行正常我将得到分配
答案 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-b
和a+b
)在赋值之前都被排序。
答案 1 :(得分:0)
您可以使用名称为before
和after
的结构来保存变量。然后,无论您拥有多少变量,都可以使用以下代码:
after.a = before.a + before.b;
after.b = before.a - before.b;
然后一旦你的计算完成,你可以通过语句移动所有新值:
before = after;