我需要在一个C++程序中编写特定的代码段,以执行以下类型的任务。
b:=a+b;
a:=a-b;
where := 运算符表示所有表达式右侧的值先计算,然后将每个表达式左侧的变量与右侧计算出的值相等。
例如,在上面的代码中,如果a=5且b=3,则我需要a和b的最终值分别为8和2,而不是执行常规赋值时得到的8和-3。
b:=a+b;
a:=a-b;
where := 运算符表示所有表达式右侧的值先计算,然后将每个表达式左侧的变量与右侧计算出的值相等。
例如,在上面的代码中,如果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-b
和a+b
)都在赋值本身之前进行了排序。a-b
和 a+b
来创建一个 std::tuple
(即一种创造我所说的临时变量的创造性方式),然后从 tuple
中取出值并将它们保存回 a
和 b
。 - James Adkisonafter.a = before.a + before.b;
after.b = before.a - before.b;
然后,一旦您的计算完成,您可以通过以下语句移动所有新值:
before = after;
a
和b
分配给临时变量,并在计算a
和b
的表达式中使用这些临时变量,那么这似乎非常容易。你是想在不使用临时变量的情况下完成它吗? - James Adkisonstd::vector
),这个逻辑可以很容易地放入一个循环中(或者你可以以任何你喜欢的方式封装它)。 - James Adkison