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

Rav*_*310 3 c++

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

b:=a+b;
a:=a-b;
Run Code Online (Sandbox Code Playgroud)

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

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

Bar*_*rry 9

你可以使用std::tie()std::make_tuple():

std::tie(a, b) = std::make_tuple(a-b, a+b);
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

但是由于这里的赋值在概念上是"原子的",所以你可以将它们全部写在一行中 - 因为所有的操作(a-ba+b)都在赋值之前进行了排序.

  • @Sibi它使用表达式`ab`和`a + b`来创建`std :: tuple`(即创建我正在讨论的临时工具的创造性方法),然后从`tuple`中获取值.将它们保存回`a`和`b`. (2认同)